{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "improving_neural_net_performance.ipynb",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": [
        "jFfc3saSxg6t",
        "FSPZIiYgyh93",
        "GhFtWjQRzD2l",
        "P8BLQ7T71JWd",
        "copyright-notice"
      ]
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "TPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "copyright-notice",
        "colab_type": "text"
      },
      "source": [
        "#### Copyright 2017 Google LLC."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "cellView": "both",
        "id": "copyright-notice2",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "eV16J6oUY-HN",
        "colab_type": "text",
        "slideshow": {
          "slide_type": "slide"
        }
      },
      "source": [
        " # 提高神经网络性能"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0Rwl1iXIKxkm",
        "colab_type": "text"
      },
      "source": [
        " **学习目标**：通过将特征标准化并应用各种优化算法来提高神经网络的性能\n",
        "\n",
        "**注意**：本练习中介绍的优化方法并非专门针对神经网络；这些方法可有效改进大多数类型的模型。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "lBPTONWzKxkn",
        "colab_type": "text"
      },
      "source": [
        " ## 设置\n",
        "\n",
        "首先，我们将加载数据。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VtYVuONUKxko",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from __future__ import print_function\n",
        "\n",
        "import math\n",
        "\n",
        "from IPython import display\n",
        "from matplotlib import cm\n",
        "from matplotlib import gridspec\n",
        "from matplotlib import pyplot as plt\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "from sklearn import metrics\n",
        "import tensorflow as tf\n",
        "from tensorflow.python.data import Dataset\n",
        "\n",
        "tf.logging.set_verbosity(tf.logging.ERROR)\n",
        "pd.options.display.max_rows = 10\n",
        "pd.options.display.float_format = '{:.1f}'.format\n",
        "\n",
        "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.cn/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
        "\n",
        "california_housing_dataframe = california_housing_dataframe.reindex(\n",
        "    np.random.permutation(california_housing_dataframe.index))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "B8qC-jTIKxkr",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def preprocess_features(california_housing_dataframe):\n",
        "  \"\"\"Prepares input features from California housing data set.\n",
        "\n",
        "  Args:\n",
        "    california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
        "      from the California housing data set.\n",
        "  Returns:\n",
        "    A DataFrame that contains the features to be used for the model, including\n",
        "    synthetic features.\n",
        "  \"\"\"\n",
        "  selected_features = california_housing_dataframe[\n",
        "    [\"latitude\",\n",
        "     \"longitude\",\n",
        "     \"housing_median_age\",\n",
        "     \"total_rooms\",\n",
        "     \"total_bedrooms\",\n",
        "     \"population\",\n",
        "     \"households\",\n",
        "     \"median_income\"]]\n",
        "  processed_features = selected_features.copy()\n",
        "  # Create a synthetic feature.\n",
        "  processed_features[\"rooms_per_person\"] = (\n",
        "    california_housing_dataframe[\"total_rooms\"] /\n",
        "    california_housing_dataframe[\"population\"])\n",
        "  return processed_features\n",
        "\n",
        "def preprocess_targets(california_housing_dataframe):\n",
        "  \"\"\"Prepares target features (i.e., labels) from California housing data set.\n",
        "\n",
        "  Args:\n",
        "    california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
        "      from the California housing data set.\n",
        "  Returns:\n",
        "    A DataFrame that contains the target feature.\n",
        "  \"\"\"\n",
        "  output_targets = pd.DataFrame()\n",
        "  # Scale the target to be in units of thousands of dollars.\n",
        "  output_targets[\"median_house_value\"] = (\n",
        "    california_housing_dataframe[\"median_house_value\"] / 1000.0)\n",
        "  return output_targets"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Ah6LjMIJ2spZ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1209
        },
        "outputId": "aa20e95e-c095-45d6-c771-f03fbe15d595"
      },
      "source": [
        "# Choose the first 12000 (out of 17000) examples for training.\n",
        "training_examples = preprocess_features(california_housing_dataframe.head(12000))\n",
        "training_targets = preprocess_targets(california_housing_dataframe.head(12000))\n",
        "\n",
        "# Choose the last 5000 (out of 17000) examples for validation.\n",
        "validation_examples = preprocess_features(california_housing_dataframe.tail(5000))\n",
        "validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))\n",
        "\n",
        "# Double-check that we've done the right thing.\n",
        "print(\"Training examples summary:\")\n",
        "display.display(training_examples.describe())\n",
        "print(\"Validation examples summary:\")\n",
        "display.display(validation_examples.describe())\n",
        "\n",
        "print(\"Training targets summary:\")\n",
        "display.display(training_targets.describe())\n",
        "print(\"Validation targets summary:\")\n",
        "display.display(validation_targets.describe())"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Training examples summary:\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>latitude</th>\n",
              "      <th>longitude</th>\n",
              "      <th>housing_median_age</th>\n",
              "      <th>total_rooms</th>\n",
              "      <th>total_bedrooms</th>\n",
              "      <th>population</th>\n",
              "      <th>households</th>\n",
              "      <th>median_income</th>\n",
              "      <th>rooms_per_person</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "      <td>12000.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>35.6</td>\n",
              "      <td>-119.6</td>\n",
              "      <td>28.5</td>\n",
              "      <td>2659.4</td>\n",
              "      <td>541.7</td>\n",
              "      <td>1435.0</td>\n",
              "      <td>503.3</td>\n",
              "      <td>3.9</td>\n",
              "      <td>2.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>2.1</td>\n",
              "      <td>2.0</td>\n",
              "      <td>12.6</td>\n",
              "      <td>2226.5</td>\n",
              "      <td>428.2</td>\n",
              "      <td>1179.1</td>\n",
              "      <td>390.6</td>\n",
              "      <td>1.9</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>32.5</td>\n",
              "      <td>-124.3</td>\n",
              "      <td>1.0</td>\n",
              "      <td>2.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.5</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>33.9</td>\n",
              "      <td>-121.8</td>\n",
              "      <td>18.0</td>\n",
              "      <td>1468.0</td>\n",
              "      <td>299.0</td>\n",
              "      <td>792.0</td>\n",
              "      <td>283.0</td>\n",
              "      <td>2.6</td>\n",
              "      <td>1.5</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>34.2</td>\n",
              "      <td>-118.5</td>\n",
              "      <td>29.0</td>\n",
              "      <td>2132.5</td>\n",
              "      <td>435.0</td>\n",
              "      <td>1166.0</td>\n",
              "      <td>410.0</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>37.7</td>\n",
              "      <td>-118.0</td>\n",
              "      <td>37.0</td>\n",
              "      <td>3173.0</td>\n",
              "      <td>652.0</td>\n",
              "      <td>1721.0</td>\n",
              "      <td>607.0</td>\n",
              "      <td>4.8</td>\n",
              "      <td>2.3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>42.0</td>\n",
              "      <td>-114.3</td>\n",
              "      <td>52.0</td>\n",
              "      <td>37937.0</td>\n",
              "      <td>6445.0</td>\n",
              "      <td>35682.0</td>\n",
              "      <td>6082.0</td>\n",
              "      <td>15.0</td>\n",
              "      <td>41.3</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "       latitude  longitude  ...  median_income  rooms_per_person\n",
              "count   12000.0    12000.0  ...        12000.0           12000.0\n",
              "mean       35.6     -119.6  ...            3.9               2.0\n",
              "std         2.1        2.0  ...            1.9               1.0\n",
              "min        32.5     -124.3  ...            0.5               0.0\n",
              "25%        33.9     -121.8  ...            2.6               1.5\n",
              "50%        34.2     -118.5  ...            3.5               1.9\n",
              "75%        37.7     -118.0  ...            4.8               2.3\n",
              "max        42.0     -114.3  ...           15.0              41.3\n",
              "\n",
              "[8 rows x 9 columns]"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Validation examples summary:\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>latitude</th>\n",
              "      <th>longitude</th>\n",
              "      <th>housing_median_age</th>\n",
              "      <th>total_rooms</th>\n",
              "      <th>total_bedrooms</th>\n",
              "      <th>population</th>\n",
              "      <th>households</th>\n",
              "      <th>median_income</th>\n",
              "      <th>rooms_per_person</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>5000.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>35.7</td>\n",
              "      <td>-119.6</td>\n",
              "      <td>28.8</td>\n",
              "      <td>2606.0</td>\n",
              "      <td>534.0</td>\n",
              "      <td>1416.5</td>\n",
              "      <td>496.2</td>\n",
              "      <td>3.9</td>\n",
              "      <td>2.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>2.2</td>\n",
              "      <td>2.0</td>\n",
              "      <td>12.5</td>\n",
              "      <td>2063.7</td>\n",
              "      <td>405.0</td>\n",
              "      <td>1069.2</td>\n",
              "      <td>369.5</td>\n",
              "      <td>1.9</td>\n",
              "      <td>1.4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>32.5</td>\n",
              "      <td>-124.3</td>\n",
              "      <td>2.0</td>\n",
              "      <td>11.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>8.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>0.5</td>\n",
              "      <td>0.1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>33.9</td>\n",
              "      <td>-121.8</td>\n",
              "      <td>19.0</td>\n",
              "      <td>1449.8</td>\n",
              "      <td>292.8</td>\n",
              "      <td>781.0</td>\n",
              "      <td>278.0</td>\n",
              "      <td>2.6</td>\n",
              "      <td>1.5</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>34.3</td>\n",
              "      <td>-118.5</td>\n",
              "      <td>29.0</td>\n",
              "      <td>2113.5</td>\n",
              "      <td>430.0</td>\n",
              "      <td>1168.5</td>\n",
              "      <td>406.0</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>37.7</td>\n",
              "      <td>-118.0</td>\n",
              "      <td>37.0</td>\n",
              "      <td>3095.5</td>\n",
              "      <td>642.2</td>\n",
              "      <td>1720.0</td>\n",
              "      <td>603.0</td>\n",
              "      <td>4.7</td>\n",
              "      <td>2.3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>42.0</td>\n",
              "      <td>-114.6</td>\n",
              "      <td>52.0</td>\n",
              "      <td>22128.0</td>\n",
              "      <td>3680.0</td>\n",
              "      <td>10988.0</td>\n",
              "      <td>3589.0</td>\n",
              "      <td>15.0</td>\n",
              "      <td>55.2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "       latitude  longitude  ...  median_income  rooms_per_person\n",
              "count    5000.0     5000.0  ...         5000.0            5000.0\n",
              "mean       35.7     -119.6  ...            3.9               2.0\n",
              "std         2.2        2.0  ...            1.9               1.4\n",
              "min        32.5     -124.3  ...            0.5               0.1\n",
              "25%        33.9     -121.8  ...            2.6               1.5\n",
              "50%        34.3     -118.5  ...            3.5               1.9\n",
              "75%        37.7     -118.0  ...            4.7               2.3\n",
              "max        42.0     -114.6  ...           15.0              55.2\n",
              "\n",
              "[8 rows x 9 columns]"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Training targets summary:\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>median_house_value</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>12000.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>207.8</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>116.4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>15.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>120.2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>180.9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>265.8</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>500.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "       median_house_value\n",
              "count             12000.0\n",
              "mean                207.8\n",
              "std                 116.4\n",
              "min                  15.0\n",
              "25%                 120.2\n",
              "50%                 180.9\n",
              "75%                 265.8\n",
              "max                 500.0"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Validation targets summary:\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>median_house_value</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>5000.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>206.1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>115.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>15.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>118.4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>179.4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>263.6</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>500.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "       median_house_value\n",
              "count              5000.0\n",
              "mean                206.1\n",
              "std                 115.0\n",
              "min                  15.0\n",
              "25%                 118.4\n",
              "50%                 179.4\n",
              "75%                 263.6\n",
              "max                 500.0"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "NqIbXxx222ea",
        "colab_type": "text"
      },
      "source": [
        " ## 训练神经网络\n",
        "\n",
        "接下来，我们将训练神经网络。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6k3xYlSg27VB",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def construct_feature_columns(input_features):\n",
        "  \"\"\"Construct the TensorFlow Feature Columns.\n",
        "\n",
        "  Args:\n",
        "    input_features: The names of the numerical input features to use.\n",
        "  Returns:\n",
        "    A set of feature columns\n",
        "  \"\"\" \n",
        "  return set([tf.feature_column.numeric_column(my_feature)\n",
        "              for my_feature in input_features])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "De9jwyy4wTUT",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
        "    \"\"\"Trains a neural network model.\n",
        "  \n",
        "    Args:\n",
        "      features: pandas DataFrame of features\n",
        "      targets: pandas DataFrame of targets\n",
        "      batch_size: Size of batches to be passed to the model\n",
        "      shuffle: True or False. Whether to shuffle the data.\n",
        "      num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
        "    Returns:\n",
        "      Tuple of (features, labels) for next data batch\n",
        "    \"\"\"\n",
        "    \n",
        "    # Convert pandas data into a dict of np arrays.\n",
        "    features = {key:np.array(value) for key,value in dict(features).items()}                                           \n",
        " \n",
        "    # Construct a dataset, and configure batching/repeating.\n",
        "    ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
        "    ds = ds.batch(batch_size).repeat(num_epochs)\n",
        "    \n",
        "    # Shuffle the data, if specified.\n",
        "    if shuffle:\n",
        "      ds = ds.shuffle(10000)\n",
        "    \n",
        "    # Return the next batch of data.\n",
        "    features, labels = ds.make_one_shot_iterator().get_next()\n",
        "    return features, labels"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "W-51R3yIKxk4",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def train_nn_regression_model(\n",
        "    my_optimizer,\n",
        "    steps,\n",
        "    batch_size,\n",
        "    hidden_units,\n",
        "    training_examples,\n",
        "    training_targets,\n",
        "    validation_examples,\n",
        "    validation_targets):\n",
        "  \"\"\"Trains a neural network regression model.\n",
        "  \n",
        "  In addition to training, this function also prints training progress information,\n",
        "  as well as a plot of the training and validation loss over time.\n",
        "  \n",
        "  Args:\n",
        "    my_optimizer: An instance of `tf.train.Optimizer`, the optimizer to use.\n",
        "    steps: A non-zero `int`, the total number of training steps. A training step\n",
        "      consists of a forward and backward pass using a single batch.\n",
        "    batch_size: A non-zero `int`, the batch size.\n",
        "    hidden_units: A `list` of int values, specifying the number of neurons in each layer.\n",
        "    training_examples: A `DataFrame` containing one or more columns from\n",
        "      `california_housing_dataframe` to use as input features for training.\n",
        "    training_targets: A `DataFrame` containing exactly one column from\n",
        "      `california_housing_dataframe` to use as target for training.\n",
        "    validation_examples: A `DataFrame` containing one or more columns from\n",
        "      `california_housing_dataframe` to use as input features for validation.\n",
        "    validation_targets: A `DataFrame` containing exactly one column from\n",
        "      `california_housing_dataframe` to use as target for validation.\n",
        "      \n",
        "  Returns:\n",
        "    A tuple `(estimator, training_losses, validation_losses)`:\n",
        "      estimator: the trained `DNNRegressor` object.\n",
        "      training_losses: a `list` containing the training loss values taken during training.\n",
        "      validation_losses: a `list` containing the validation loss values taken during training.\n",
        "  \"\"\"\n",
        "\n",
        "  periods = 10\n",
        "  steps_per_period = steps / periods\n",
        "  \n",
        "  # Create a DNNRegressor object.\n",
        "  my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
        "  dnn_regressor = tf.estimator.DNNRegressor(\n",
        "      feature_columns=construct_feature_columns(training_examples),\n",
        "      hidden_units=hidden_units,\n",
        "      optimizer=my_optimizer\n",
        "  )\n",
        "  \n",
        "  # Create input functions.\n",
        "  training_input_fn = lambda: my_input_fn(training_examples, \n",
        "                                          training_targets[\"median_house_value\"], \n",
        "                                          batch_size=batch_size)\n",
        "  predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
        "                                                  training_targets[\"median_house_value\"], \n",
        "                                                  num_epochs=1, \n",
        "                                                  shuffle=False)\n",
        "  predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
        "                                                    validation_targets[\"median_house_value\"], \n",
        "                                                    num_epochs=1, \n",
        "                                                    shuffle=False)\n",
        "\n",
        "  # Train the model, but do so inside a loop so that we can periodically assess\n",
        "  # loss metrics.\n",
        "  print(\"Training model...\")\n",
        "  print(\"RMSE (on training data):\")\n",
        "  training_rmse = []\n",
        "  validation_rmse = []\n",
        "  for period in range (0, periods):\n",
        "    # Train the model, starting from the prior state.\n",
        "    dnn_regressor.train(\n",
        "        input_fn=training_input_fn,\n",
        "        steps=steps_per_period\n",
        "    )\n",
        "    # Take a break and compute predictions.\n",
        "    training_predictions = dnn_regressor.predict(input_fn=predict_training_input_fn)\n",
        "    training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
        "    \n",
        "    validation_predictions = dnn_regressor.predict(input_fn=predict_validation_input_fn)\n",
        "    validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
        "    \n",
        "    # Compute training and validation loss.\n",
        "    training_root_mean_squared_error = math.sqrt(\n",
        "        metrics.mean_squared_error(training_predictions, training_targets))\n",
        "    validation_root_mean_squared_error = math.sqrt(\n",
        "        metrics.mean_squared_error(validation_predictions, validation_targets))\n",
        "    # Occasionally print the current loss.\n",
        "    print(\"  period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
        "    # Add the loss metrics from this period to our list.\n",
        "    training_rmse.append(training_root_mean_squared_error)\n",
        "    validation_rmse.append(validation_root_mean_squared_error)\n",
        "  print(\"Model training finished.\")\n",
        "\n",
        "  # Output a graph of loss metrics over periods.\n",
        "  plt.ylabel(\"RMSE\")\n",
        "  plt.xlabel(\"Periods\")\n",
        "  plt.title(\"Root Mean Squared Error vs. Periods\")\n",
        "  plt.tight_layout()\n",
        "  plt.plot(training_rmse, label=\"training\")\n",
        "  plt.plot(validation_rmse, label=\"validation\")\n",
        "  plt.legend()\n",
        "\n",
        "  print(\"Final RMSE (on training data):   %0.2f\" % training_root_mean_squared_error)\n",
        "  print(\"Final RMSE (on validation data): %0.2f\" % validation_root_mean_squared_error)\n",
        "\n",
        "  return dnn_regressor, training_rmse, validation_rmse"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KueReMZ9Kxk7",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 693
        },
        "outputId": "f8568ca4-3ff3-4fbb-9700-2c25ce2c465e"
      },
      "source": [
        "_ = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0007),\n",
        "    steps=5000,\n",
        "    batch_size=70,\n",
        "    hidden_units=[10, 10],\n",
        "    training_examples=training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "\n",
            "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
            "For more information, please see:\n",
            "  * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
            "  * https://github.com/tensorflow/addons\n",
            "If you depend on functionality not listed there, please file an issue.\n",
            "\n",
            "Training model...\n",
            "RMSE (on training data):\n",
            "  period 00 : 150.09\n",
            "  period 01 : 135.71\n",
            "  period 02 : 125.21\n",
            "  period 03 : 116.38\n",
            "  period 04 : 109.44\n",
            "  period 05 : 103.81\n",
            "  period 06 : 102.37\n",
            "  period 07 : 101.50\n",
            "  period 08 : 100.65\n",
            "  period 09 : 104.54\n",
            "Model training finished.\n",
            "Final RMSE (on training data):   104.54\n",
            "Final RMSE (on validation data): 104.13\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nbuf/AU/lIv/rixpYAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "flxmFt0KKxk9",
        "colab_type": "text"
      },
      "source": [
        " ## 线性缩放\n",
        "将输入标准化以使其位于 (-1, 1) 范围内可能是一种良好的标准做法。这样一来，SGD 在一个维度中采用很大步长（或者在另一维度中采用很小步长）时不会受阻。数值优化的爱好者可能会注意到，这种做法与使用预调节器 (Preconditioner) 的想法是有联系的。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Dws5rIQjKxk-",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def linear_scale(series):\n",
        "  min_val = series.min()\n",
        "  max_val = series.max()\n",
        "  scale = (max_val - min_val) / 2.0\n",
        "  return series.apply(lambda x:((x - min_val) / scale) - 1.0)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MVmuHI76N2Sz",
        "colab_type": "text",
        "slideshow": {
          "slide_type": "slide"
        }
      },
      "source": [
        " ## 任务 1：使用线性缩放将特征标准化\n",
        "\n",
        "**将输入标准化到 (-1, 1) 这一范围内。**\n",
        "\n",
        "**花费 5 分钟左右的时间来训练和评估新标准化的数据。您能达到什么程度的效果？**\n",
        "\n",
        "一般来说，当输入特征大致位于相同范围时，神经网络的训练效果最好。\n",
        "\n",
        "对您的标准化数据进行健全性检查。（如果您忘了将某个特征标准化，会发生什么情况？）"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yD948ZgAM6Cx",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def normalize_linear_scale(examples_dataframe):\n",
        "  \"\"\"Returns a version of the input `DataFrame` that has all its features normalized linearly.\"\"\"\n",
        "  #\n",
        "  # Your code here: normalize the inputs.\n",
        "  #\n",
        "  pass\n",
        "\n",
        "normalized_dataframe = normalize_linear_scale(preprocess_features(california_housing_dataframe))\n",
        "normalized_training_examples = normalized_dataframe.head(12000)\n",
        "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
        "\n",
        "_ = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0007),\n",
        "    steps=5000,\n",
        "    batch_size=70,\n",
        "    hidden_units=[10, 10],\n",
        "    training_examples=normalized_training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=normalized_validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jFfc3saSxg6t",
        "colab_type": "text"
      },
      "source": [
        " ### 解决方案\n",
        "\n",
        "点击下方即可查看一种可能的解决方案。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Ax_IIQVRx4gr",
        "colab_type": "text"
      },
      "source": [
        " 由于标准化会使用最小值和最大值，我们必须确保在整个数据集中一次性完成该操作。\n",
        "\n",
        "我们之所以可以这样做，是因为我们所有的数据都在一个 DataFrame 中。如果我们有多个数据集，则最好从训练集中导出标准化参数，然后以相同方式将其应用于测试集。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "D-bJBXrJx-U_",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 567
        },
        "outputId": "37e50bbc-f7d7-469f-f3c2-62f0ed0e4575"
      },
      "source": [
        "def normalize_linear_scale(examples_dataframe):\n",
        "  \"\"\"Returns a version of the input `DataFrame` that has all its features normalized linearly.\"\"\"\n",
        "  processed_features = pd.DataFrame()\n",
        "  processed_features[\"latitude\"] = linear_scale(examples_dataframe[\"latitude\"])\n",
        "  processed_features[\"longitude\"] = linear_scale(examples_dataframe[\"longitude\"])\n",
        "  processed_features[\"housing_median_age\"] = linear_scale(examples_dataframe[\"housing_median_age\"])\n",
        "  processed_features[\"total_rooms\"] = linear_scale(examples_dataframe[\"total_rooms\"])\n",
        "  processed_features[\"total_bedrooms\"] = linear_scale(examples_dataframe[\"total_bedrooms\"])\n",
        "  processed_features[\"population\"] = linear_scale(examples_dataframe[\"population\"])\n",
        "  processed_features[\"households\"] = linear_scale(examples_dataframe[\"households\"])\n",
        "  processed_features[\"median_income\"] = linear_scale(examples_dataframe[\"median_income\"])\n",
        "  processed_features[\"rooms_per_person\"] = linear_scale(examples_dataframe[\"rooms_per_person\"])\n",
        "  return processed_features\n",
        "\n",
        "normalized_dataframe = normalize_linear_scale(preprocess_features(california_housing_dataframe))\n",
        "normalized_training_examples = normalized_dataframe.head(12000)\n",
        "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
        "\n",
        "_ = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.005),\n",
        "    steps=2000,\n",
        "    batch_size=50,\n",
        "    hidden_units=[10, 10],\n",
        "    training_examples=normalized_training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=normalized_validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Training model...\n",
            "RMSE (on training data):\n",
            "  period 00 : 170.05\n",
            "  period 01 : 114.28\n",
            "  period 02 : 102.35\n",
            "  period 03 : 85.82\n",
            "  period 04 : 76.95\n",
            "  period 05 : 74.94\n",
            "  period 06 : 73.95\n",
            "  period 07 : 72.57\n",
            "  period 08 : 71.95\n",
            "  period 09 : 71.16\n",
            "Model training finished.\n",
            "Final RMSE (on training data):   71.16\n",
            "Final RMSE (on validation data): 70.86\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nazHPT1sb6TJERNizZw9PPPFErZc7//zz2bOn6h/Zd999Nx999NHhlhYRMRtOgfg4zs1sw8fLt1FY\nUhbpckQkxh0qnEpLq76U2OTJk2nevHmV8/zmN79h2LBhR1RffYvZcAI4r3c78orLmLoyO9KliEiM\nmzBhAt988w0nnngiAwcOZMiQIYwYMYJevXoBMGrUKPr3709mZiZPP/30geW6dOnCjh07WLduHT17\n9uT6668nMzOTc845h4IC78LT48eP54033jgw/z333EO/fv04/vjjWbFiBQDZ2dmcffbZZGZmct11\n19G5c2d27NhRz6/Ct2K6K/kp3TJonhJkypKtnJPZNtLliEgUuO+/S1m2eV+drrNX+6bc8/3MKud5\n8MEHWbJkCQsWLOCzzz7jggsuYMmSJQe6Yj///PO0aNGCgoICBg4cyEUXXURGRsZB61i1ahWvvvoq\nzzzzDJdeeilvvvkmV1xxxXceq2XLlsybN48nnniChx56iGeffZb77ruPs846izvuuIP33nuP5557\nru5egMMQu1tOJYUE3/0pE9ot4KNl2ygqVdOeiESPk0466aBjhB577DH69OnDoEGD2LhxI6tWrfrO\nMl27duXEE08EoH///qxbt67SdY8ZM+Y780ybNo1x48YBMHz4cNLT0+vw2dRe7G45BRJhw0zOjfua\nCUWZTFu1g6E920S6KhGJsOq2cOpLamrqgeHPPvuMjz76iBkzZpCSksIZZ5xR6TFEiYmJB4bj4+MP\nNOsdar74+Phq92lFSuxuOZlB5miab/+KLkm5TF68NdIViUgMS0tLIycnp9Jpe/fuJT09nZSUFFas\nWMHMmTPr/PEHDx7MpEmTAPjggw/YvXt3nT9GbcRuOAH0GoXhuKXtMj5ctpXi0vJIVyQiMSojI4PB\ngwfTu3dvfvGLXxw0bfjw4ZSWltKzZ08mTJjAoEGD6vzx77nnHj744AN69+7Nv/71L9q2bUtaWlqd\nP05NmXMuYg9+pAYMGOCO6GKDzsHfTma3NaPvxtuYePVAzjiudd0VKCINwvLly+nZs2eky4iooqIi\n4uPjCQQCzJgxg5tuuokFCxYc0Tore13NbK5zbkB1y8buPif4tmnv8z/QOTGXyYu3KJxEJCZt2LCB\nSy+9lPLychISEnjmmWciWk9shxNA5ijs8wf5Sdul3L8snQfKygnGx3Zrp4jEnu7duzN//vxIl3GA\nvoVb94RWPTirfAZ78kuYuWZnpCsSEYl5CieAXqNIz55N54R9TF68JdLViIjEPIUTeE17OG5uu5z3\nl26jtEy99kREIknhBAea9oaVf8muvGK+Wrsr0hWJiMQ0hdN+maNJ3zGXo4L7eFdNeyIS5Zo0aQLA\n5s2bufjiiyud54wzzqC6w20effRR8vPzD9yvySU46oPCab+QA3LfX7qVsvKGe/yXiMSO9u3bHzjj\n+OGoGE41uQRHfQhbOJnZ82a23cyWVBj/EzNbYWZLzeyPIePvMLPVZva1mZ0brroOqXUPaNWToW46\nO3KLmb1OTXsiUn8mTJjA3/72twP37733Xu6//36GDh164PIWb7/99neWW7duHb179wagoKCAcePG\n0bNnT0aPHn3QufVuuukmBgwYQGZmJvfccw/gnUx28+bNnHnmmZx55pnAt5fgAHj44Yfp3bs3vXv3\n5tFHHz3weIe6NEddCudxThOBx4GX9o8wszOBkUAf51yRmbX2x/cCxgGZQHvgIzM71jlXv6cKzxxF\ni88e5KjgHqYs3sKgozOqX0ZEGpcpE2Dr4rpdZ9vj4bwHq5xl7Nix3Hbbbdx8880ATJo0iffff59b\nb72Vpk2bsmPHDgYNGsSIESMws0rX8eSTT5KSksLy5ctZtGgR/fr1OzDtgQceoEWLFpSVlTF06FAW\nLVrErbfeysMPP8ynn35Ky5YtD1rX3LlzeeGFF5g1axbOOU4++WROP/100tPTa3xpjiMRti0n59xU\noOLmx03Ag865In+e7f74kcBrzrki59xaYDVwUrhqOyS/ae/HbZYxZclWytW0JyL1pG/fvmzfvp3N\nmzezcOFC0tPTadu2LXfeeScnnHACw4YNY9OmTWzbtu2Q65g6deqBkDjhhBM44YQTDkybNGkS/fr1\no2/fvixdupRly5ZVWc+0adMYPXo0qampNGnShDFjxvDFF18ANb80x5Go7zNEHAsMMbMHgELg/5xz\ns4EOQOhpdrP8cfXLb9obVj6DCTnfY+6G3Qzs0qLeyxCRCKpmCyecLrnkEt544w22bt3K2LFjefnl\nl8nOzmbu3LkEg0G6dOlS6aUyqrN27VoeeughZs+eTXp6OuPHjz+s9exX00tzHIn67hARAFoAg4Bf\nAJPsUNunh2BmN5jZHDObk50dhsurZ44mY+c8Ogb26IBcEalXY8eO5bXXXuONN97gkksuYe/evbRu\n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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MrwtdStNJ6ZQ",
        "colab_type": "text",
        "slideshow": {
          "slide_type": "slide"
        }
      },
      "source": [
        " ## 任务 2：尝试其他优化器\n",
        "\n",
        "** 使用 AdaGrad 和 Adam 优化器并对比其效果。**\n",
        "\n",
        "AdaGrad 优化器是一种备选方案。AdaGrad 的核心是灵活地修改模型中每个系数的学习率，从而单调降低有效的学习率。该优化器对于凸优化问题非常有效，但不一定适合非凸优化问题的神经网络训练。您可以通过指定 `AdagradOptimizer`（而不是 `GradientDescentOptimizer`）来使用 AdaGrad。请注意，对于 AdaGrad，您可能需要使用较大的学习率。\n",
        "\n",
        "对于非凸优化问题，Adam 有时比 AdaGrad 更有效。要使用 Adam，请调用 `tf.train.AdamOptimizer` 方法。此方法将几个可选超参数作为参数，但我们的解决方案仅指定其中一个 (`learning_rate`)。在应用设置中，您应该谨慎指定和调整可选超参数。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "61GSlDvF7-7q",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#\n",
        "# YOUR CODE HERE: Retrain the network using Adagrad and then Adam.\n",
        "#"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FSPZIiYgyh93",
        "colab_type": "text"
      },
      "source": [
        " ### 解决方案\n",
        "\n",
        "点击下方即可查看解决方案"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "X1QcIeiKyni4",
        "colab_type": "text"
      },
      "source": [
        " 首先，我们来尝试 AdaGrad。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Ntn4jJxnypGZ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 567
        },
        "outputId": "a4dfa59f-7414-4064-a217-605bbfa4e9a4"
      },
      "source": [
        "_, adagrad_training_losses, adagrad_validation_losses = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.AdagradOptimizer(learning_rate=0.5),\n",
        "    steps=500,\n",
        "    batch_size=100,\n",
        "    hidden_units=[10, 10],\n",
        "    training_examples=normalized_training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=normalized_validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Training model...\n",
            "RMSE (on training data):\n",
            "  period 00 : 85.36\n",
            "  period 01 : 73.80\n",
            "  period 02 : 72.89\n",
            "  period 03 : 73.14\n",
            "  period 04 : 73.45\n",
            "  period 05 : 70.83\n",
            "  period 06 : 72.83\n",
            "  period 07 : 69.93\n",
            "  period 08 : 69.72\n",
            "  period 09 : 69.18\n",
            "Model training finished.\n",
            "Final RMSE (on training data):   69.18\n",
            "Final RMSE (on validation data): 69.18\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n2KlLAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5JUsCdRRyso3",
        "colab_type": "text"
      },
      "source": [
        " 现在，我们来尝试 Adam。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lZB8k0upyuY8",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 567
        },
        "outputId": "a31e8808-8a97-4874-dd8f-283f27c47844"
      },
      "source": [
        "_, adam_training_losses, adam_validation_losses = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.AdamOptimizer(learning_rate=0.009),\n",
        "    steps=500,\n",
        "    batch_size=100,\n",
        "    hidden_units=[10, 10],\n",
        "    training_examples=normalized_training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=normalized_validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Training model...\n",
            "RMSE (on training data):\n",
            "  period 00 : 185.46\n",
            "  period 01 : 118.05\n",
            "  period 02 : 109.50\n",
            "  period 03 : 96.21\n",
            "  period 04 : 79.52\n",
            "  period 05 : 72.57\n",
            "  period 06 : 71.29\n",
            "  period 07 : 71.20\n",
            "  period 08 : 70.55\n",
            "  period 09 : 70.73\n",
            "Model training finished.\n",
            "Final RMSE (on training data):   70.73\n",
            "Final RMSE (on validation data): 70.61\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAEYCAYAAAD4czk4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XecVOXd/vHPd2e2s3SQXpS29LIU\nYxcUUBbsIhqjiRqNxuhjzIP+fCyJphpjjNHEHhJREXsDREEw0pZepUhb6tLb9r1/f5wDjuuyu7A7\nO7O71/v1GvbMafOdM8Ncc59z5tzmnENERCSaxES6ABERkeIUTiIiEnUUTiIiEnUUTiIiEnUUTiIi\nEnUUTiIiEnUUTiLVhJk5M+sQ6TqqMzO738xeOMllXzGzRyu7JimZwqmGM7MNZpZtZofMbLv/H6xO\nJay3nf9hGSxlnof9eX5RbPwv/PEPV7SOE2VmZ5rZV2a238z2mNl/zax/VddR2cxsupnl+K/z0dsH\nka6rMvjvlcP+c9piZk+YWeBk1uWc+61z7qbKrlEqn8Kpdkh3ztUBegN9gPuq8LFXA9cXG/cjf3yV\nMrO6wIfA34CGQEvgESA3ArWc1IdrGe5wztUJuaUf57G/94WitC8Z5V1HmPXy38ODgTHAzSe6ggjU\nLBWgcKpFnHPbgcl4IQWAmdUzs3FmlmVmG83sATOL8afF+Pc3mtlOf756/qIz/L/7/G+0px/nYecB\nSWbWzV9nNyDBH3+MmY0ws0Vmts9v2fQMmTbWzNaZ2UEzW2Fml4ZMu8HMvjSzx81sr5mtN7Phx6ml\nk78dXnPOFTrnsp1zU5xzS/x1Bfz17DKzb8zs9tDWod8KHRLy2A+b2X9C7r/pt073m9mMo8/Zn/aK\nmT1rZh+b2WHgPDOL9x9vk5ntMLN/mFliyDL3mtk2M9tqZj8+znMqk5mda2aZZva/ZrYdeLmkcf68\nN5vZWr9V+b6ZtQhZj/O3yRpgTQmP84mZ3VFs3GIzu8w8f/HfRwfMbKmZdT/R5+KcWwXMBLr7629h\nZm/579/1ZnZnyGM/bGYTzew/ZnYAuKGE12ykmS3333fTzSw1ZFofM1vgv+/ewHvfHp3W2Mw+9Jfb\nY2Yzj/6/kcqhjVmLmFkrYDiwNmT034B6wKnAOXitnBv9aTf4t/P86XWAp/1pZ/t/6/vf0meV8tD/\n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\no3ASEZGo8/8ByFcGLLxohwgAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "twYgC8FGyxm6",
        "colab_type": "text"
      },
      "source": [
        " 我们并排输出损失指标的图表。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8RHIUEfqyzW0",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 295
        },
        "outputId": "8bab5b50-05ae-416c-c2eb-451f9dc9c045"
      },
      "source": [
        "plt.ylabel(\"RMSE\")\n",
        "plt.xlabel(\"Periods\")\n",
        "plt.title(\"Root Mean Squared Error vs. Periods\")\n",
        "plt.plot(adagrad_training_losses, label='Adagrad training')\n",
        "plt.plot(adagrad_validation_losses, label='Adagrad validation')\n",
        "plt.plot(adam_training_losses, label='Adam training')\n",
        "plt.plot(adam_validation_losses, label='Adam validation')\n",
        "_ = plt.legend()"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd8VFX6+PHPMyV10oAgndB77yIy\nAVRcESkqTUHd1e+ua1nXn3VdF3V1XcV1XV3XtSAqEEFUBBELIk1BARdFmnQIHQIhPZmZ8/tjbuIQ\nQhLSJgnPO695zZ1z23NnJvPcc+6954oxBqWUUqowW7ADUEopVT1pglBKKVUkTRBKKaWKpAlCKaVU\nkTRBKKWUKpImCKWUUkXSBKFUFRIRIyKtgx1HTSYiD4vI62Wcd4aI/LWiY6qtNEHUACKyR0SyRCRd\nRA5bX3JXBSw3wfrBchQzzVRrmrsLld9tlU8tbxznS0QuEZFvRCRVRFJE5GsR6VPVcVQ0EVkmItnW\n55z/WBjsuCqC9V3JsLbpgIj8Q0TsZVmWMeYpY8xvKjpGdTZNEDXH1cYYF9Ad6AE8VIXr/hmYXKhs\nilVepUQkGvgYeBGoAzQGHgNyghBLmX7gSnCHMcYV8Lj6HOs+K6kXl+hLu4xK1s36Dg8FJgK3nu8C\nghDzBU0TRA1jjDkMfIY/UQAgIjEi8raIHBORvSLyiIjYrHE26/VeETlqTRdjzbrCej5l7dkNOMdq\n1wIRItLJWmYnIMwqLyAiI0Rkg4icsvbwuwaMe1BEdopImohsFpHRAeNuEpFVIjJNRE6KyG4RufIc\nsbS13ockY4zXGJNljPncGPOjtSy7tZzjIrJLRH4fWEuyamPDAtY9VURmBrx+z6qlpYrIivxttsbN\nEJH/iMgnIpIBJIpIqLW+fSJyREReEZHwgHnuE5FDInJQRG45xzaVSETcIpIsIg+IyGHgzaLKrGlv\nFZEdVu1qgYg0CliOsd6T7cD2ItazWETuKFT2g4iMEb/nre/RaRHZKCKdz3dbjDFbgZVAZ2v5jUTk\nfev7u1tE7gpY91QRmSciM0XkNHBTEZ/ZSBHZZH3vlolIh4BxPUTke+t7Nwf/9zZ/XD0R+diaL0VE\nVub/3yg/fTNqGBFpAlwJ7AgofhGIAVoCg/Hv7d9sjbvJeiRa413AS9a4S63nWGtvdXUxq36HX2oR\nU6zXgXH1AKYD/wfUBf4LLBCRUGuSncAgK87HgJki0jBgEf2AbUA94BngDRGRIuL4GfCKyFsicqWI\nxBUafyswAn8tqzdwbTHbVJTFQBugPvA9MKvQ+InAk0AUsAp4Gn/S6g60xl+jeRRARIYD/w+4zFrm\nMMqnAf5aU3PgtqLKRGQI8DfgeqAhsBd4t9ByRuF/vzsWsY4kYEL+CxHpaC17EXA5/u9MW/yf4/XA\nifPdCGuZg4D/WT/IC4Ef8L93Q4E/iMgVAbNcA8wDYin0eYhIWyvmPwDxwCfAQhEJEZEQYD7+72od\n4D1gbMDs9wLJ1nwXAQ8D2vdQIGOMPqr5A9gDpANp+L/AX+L/UQewA7lAx4Dp/w9YZg1/CdweMK4d\nkAc4gARreY5i1j0VmAk0A/YBTuu5qVU+1ZruP8AThebdBgw+x3I3ANdYwzcBOwLGRVhxNTjHvB2A\nGfj/uT3AAuAia9xS4LcB014euI3Wezms8PadYz2x1rwx1usZwNsB4wXIAFoFlA0AdlvD04GnA8a1\ntZbX+hzrWwZkAqcCHk9Y49zW5xwWMH1RZW8AzwS8dlmfd4L12gBDivm8o6xtam69fhKYbg0PwZ+g\n+wO28/wOG+A0cBL/zsJf8e+g9gP2FZr2IeDNgM9nRVHfSWv4z8DcgHE24ID13lwKHAQkYPw3wF+t\n4ceBj871eejDaA2iBhlljInC/8Vvj39PG+vZiX9PMd9e/HtjAI2KGOfAv8dUasaYffhrLU8B240x\n+wtN0hy416qunxKRU/iTSCMAEZkc0Px0Cn/zQr2A+Q8HrCvTGizyQLwxZosx5iZjTBNrOY2AfwZs\nb2BsewvPfy5W89TTVlPYafzJhEJxBi47Hn8yWx+wXZ9a5WWN5S5jTGzA488B444ZY7ILTV+47IzP\n2xiTjn8vv3HANIU/uwLGmDT8tYXxVtEErL12Y8xS/LXPfwNHReRV8R8TKq2expg4Y0wrY8wjxhgf\n/u9No0Lfm4c58/t5zng5e3t91vSNrXEHjJUNLIGfwbP4v9OfW82RD57HtlwQNEHUMMaY5fj3ZKdZ\nRcfx7yE2D5isGf69KPDvQRUe5wGOcP7V6bfxV8vfLmLcfuDJQj9uEcaYJBFpDrwG3AHUNcbEAj/h\n3wMvF+Nvz56B1Z4NHMKfmPI1KzRLBv4f9XwNAoYn4m/OGIa/CSXBKg+MM/A9Ow5kAZ0CtjnG+A/E\nliaW81XU51W47IzPW0Qi8Tf5HShmnsKSgAniPyYVBnxVMKMx/zLG9MLfPNUWuK/U0RdtP/4aV+D3\nJsoY86tSxlt4ewX/e34A//vfuFBTZcFnYIxJM8bca4xpCYwE/igiQ8u5PbWKJoia6Z/AZSLSzRjj\nBeYCT4pIlPVj/Ef8zT/g/2e/R0RaiP/U2KeAOcYYD3AM8OE/NlEac/A32cwtYtxrwG9FpJ91MDNS\nRK4SkSggEv8/+TEAEbmZX37Qz4uItBeRe61jMYhIU/x7uWusSeYCd4lIE+v4ROG9wg3AeBFxikjh\nYxRR+M+GOoE/iTxVXCzW3uprwPMiUt+Kp3FA+/lc/AdVO4pIBPCXsmzzeUoCbhaR7tbxn6eAb40x\ne85jGZ/g/9F9HP93xQcgIn2sz9eJP9Fm4//+lMd3QJr4D7SHW7W4zlL605bnAleJyFArrnvxf4bf\nAKvx7wzdZX3eY4C++TOK/6SK1lYCSQW8FbA9tYomiBrIGHMM/178o1bRnfj/YXfhP3A6G3/7N9bz\nO/jPWNqN/5/6Tms5mfjbmL+2qvf9S1hvljFmiTEmq4hx6/AfIH4JfzvzDvzHFjDGbAaew/8PewTo\nAnxdhk0H/3GYfsC34j+TaA3+2si91vjX8J/l9QP+g8wfFJr/z0ArK8bH8L9X+d7G3wRxANjML0mn\nOA/g39Y1VrPUEvzHeTDGLMafzJda0ywtxfJekjOvg1hfinkKGGOW4N/G9/HvQbfil+ai0i4jB//7\nNowz359o/O/vSfzv0wn8zTT5F68tPp/1WOvy4j+poDv+7+dx4HX8NbjSzL8NuAH/iRrHgavxnxKe\na4zJBcbg/x6mAOM48/vQBv/nlY7/u/myMeYrVAE5s3lOqdpFRBLw//A4rVqTUqqUtAahlFKqSJog\nlFJKFUmbmJRSShVJaxBKKaWKVKM7vqpXr55JSEgIdhhKKVWjrF+//rgxJr6k6Wp0gkhISGDdunXB\nDkMppWoUESlVDwPaxKSUUqpImiCUUkoVSROEUkqpItXoYxBKqaLl5eWRnJxMdnbhzl/VhSQsLIwm\nTZrgdDrLNL8mCKVqoeTkZKKiokhISKDo+y6p2s4Yw4kTJ0hOTqZFixZlWoY2MSlVC2VnZ1O3bl1N\nDhcwEaFu3brlqkVqglCqltLkoMr7HbggE8TOUzt5Zu0z5Hpzgx2KUkpVWxdkgjiQfoB3Nr/DusN6\nkZ1SlWn+/PmICFu3bj3nNDfddBPz5s2rwqhg6tSpTJs27azy+fPns3nz5vNe3oIFC3j66aeLnebg\nwYNce+21xU5T3VyQCaJvg76E2cNYnrw82KEoVaslJSVxySWXkJSUVOnr8njKf7uP4hJEccsfOXIk\nDz5Y/C2tGzVqVOWJsLwuyAQR5gijX8N+LE9ejvZmq1TlSE9PZ9WqVbzxxhu8++67BeXGGO644w7a\ntWvHsGHDOHr0aMG4xx9/nD59+tC5c2duu+22gv/PtWvX0rVrV7p37859991H587+O9bOmDGDkSNH\nMmTIEIYOHUp6ejpDhw6lZ8+edOnShY8++qhg2U8++SRt27blkksuYdu2bWfF+80337BgwQLuu+8+\nunfvzs6dO3G73fzhD3+gd+/evPDCCyxcuJB+/frRo0cPhg0bxpEjRwriuOOOOwB/jeiuu+7i4osv\npmXLlgVJYc+ePWfEPWbMGIYPH06bNm24//77C+J44403aNu2LX379uXWW28tWG4wXJCnueZs3864\nTzO4q30yu1N30zK2tLdkVqrmeWzhJjYfPF2hy+zYKJq/XN2p2Gk++ugjhg8fTtu2balbty7r16+n\nV69efPjhh2zbto3Nmzdz5MgROnbsyC233ALAHXfcwaOP+u+ke+ONN/Lxxx9z9dVXc/PNN/Paa68x\nYMCAs/bUv//+e3788Ufq1KmDx+Phww8/JDo6muPHj9O/f39GjhzJ999/z7vvvsuGDRvweDz07NmT\nXr16nbGciy++mJEjRzJixIgzmoJyc3ML+nw7efIka9asQUR4/fXXeeaZZ3juuefO2vZDhw6xatUq\ntm7dysiRI4tsWtqwYQP/+9//CA0NpV27dtx5553Y7XaeeOIJvv/+e6KiohgyZAjdunUrxSdSOS7I\nBJF74AD1Fq6hU4SN5cnLNUEoVQmSkpK4++67ARg/fjxJSUn06tWLFStWMGHCBOx2O40aNWLIkCEF\n83z11Vc888wzZGZmkpKSQqdOnRg0aBBpaWkMGDAAgIkTJ/Lxxx8XzHPZZZdRp04dwF87efjhh1mx\nYgU2m40DBw5w5MgRVq5cyejRo4mIiAD8TUKlNW7cuILh5ORkxo0bx6FDh8jNzT3n9QWjRo3CZrPR\nsWPHglpGYUOHDiUmxn/r7Y4dO7J3716OHz/O4MGDC7bnuuuu4+effy51rBXtgkwQkf37I2FhDN0f\nwYrkFdzc+eZgh6RUpSlpT78ypKSksHTpUjZu3IiI4PV6ERGeffbZc86TnZ3N7bffzrp162jatClT\np04t1Tn8kZGRBcOzZs3i2LFjrF+/HqfTSUJCQrmvJg9c/p133skf//hHRo4cybJly5g6dWqR84SG\nhhYMn6sZO3Aau91eIcdQKlqlHYMQkekiclREfgoo6y4ia0Rkg4isE5G+VrmIyL9EZIeI/CgiPSsr\nLgBbWBiRAwbQbXse/zvyPak5qZW5OqUuOPPmzePGG29k79697Nmzh/3799OiRQtWrlzJpZdeypw5\nc/B6vRw6dIivvvoKoOCHvF69eqSnpxe03cfGxhIVFcW3334LcMbxjMJSU1OpX78+TqeTr776ir17\n/b1aX3rppcyfP5+srCzS0tJYuHBhkfNHRUWRlpZW7PIbN24MwFtvvXWe70rJ+vTpw/Llyzl58iQe\nj4f333+/wtdxPirzIPUMYHihsmeAx4wx3YFHrdcAVwJtrMdtwH8qMS4AXIluwo+l0eiYl9UHV1f2\n6pS6oCQlJTF69OgzysaOHVtQ3qZNGzp27MjkyZMLmo5iY2O59dZb6dy5M1dccQV9+vQpmPeNN97g\n1ltvpXv37mRkZBQ0zRQ2adIk1q1bR5cuXXj77bdp3749AD179mTcuHF069aNK6+88oxlBxo/fjzP\nPvssPXr0YOfOnWeNnzp1Ktdddx29evWiXr16ZXpvitO4cWMefvhh+vbty8CBA0lISDjntlaFSr0n\ntYgkAB8bYzpbrz8Dphtj5ojIBOBqY8xEEfkvsMwYk2RNtw1wG2MOFbf83r17m7LeMCjvyBF2DHbz\nwdBI0sdfxt8G/a1My1GqOtqyZQsdOnQIdhgVJj09HZfLBcDTTz/NoUOHeOGFF4IcVeXI31aPx8Po\n0aO55ZZbzkq256Oo74KIrDfG9C5p3qo+BvEH4DMRmYa/9nKxVd4Y2B8wXbJVVmyCKA/nRRcR1rEj\nl+w5zCMHVuH1ebHb7JW1OqVUOSxatIi//e1veDwemjdvzowZM4IdUqWZOnUqS5YsITs7m8svv5xR\no0YFLZaqThC/A+4xxrwvItcDbwDDzmcBInIb/mYomjVrVq5gXImJxL/8Mt6TNjYe30j3+t3LtTyl\nVOUYN27cGWcT1WZFXeEdLFV9odwU4ANr+D2grzV8AGgaMF0Tq+wsxphXjTG9jTG94+NLvOd2sVxu\nN2IMPXcJK5JXlGtZSilV21R1gjgIDLaGhwDbreEFwGTrbKb+QGpJxx8qQlinjjji4xm6P1q73VBK\nqUIqrYlJRJIAN1BPRJKBvwC3Ai+IiAPIxmoqAj4BfgXsADKBKrkwQWw2XO7BtF60gJ3Ht3Eo/RAN\nXQ2rYtVKKVXtVVqCMMZMOMeoXoULjP9Uqt9XVizFcbndnHpvHh3221h5YCXXt7s+GGEopVS1c0F2\n1hcocsAAJCSEwXtd2sykVAWrad19l2c5jz76KEuWLDlrmmXLljFixIhil7NhwwY++eSTgtel6T68\nKlzwCcIWEUFE/3702mH49uAasjxZwQ5JqVqjpnX3XR6PP/44w4ad10mZBQoniNJ0H14VLvgEAf5m\nJtfRNOoey2Ht4bXBDkepWqGmdfedmppK8+bN8fl8AGRkZNC0aVPy8vJ47bXX6NOnD926dWPs2LFk\nZmaeNX9gTejTTz+lffv29OzZkw8++KBgmu+++44BAwbQo0cPLr74YrZt20Zubi6PPvooc+bMoXv3\n7syZM+eM7sP37NnDkCFD6Nq1K0OHDmXfvn0F6yuqW/GKdEF21ldYlNvNkcefoP8uByuSV3Bpk0uD\nHZJSFWfxg3B4Y8Uus0EXuLL4JpCa1t13TEwM3bt3Z/ny5SQmJvLxxx9zxRVX4HQ6GTNmDLfeeisA\njzzyCG+88QZ33nlnkdudnZ3NrbfeytKlS2nduvUZ12+0b9+elStX4nA4WLJkCQ8//DDvv/8+jz/+\nOOvWreOll14COONCwDvvvJMpU6YwZcoUpk+fzl133cX8+fOB0nUrXh5agwCcjRoR2q4dl+6N0JsI\nKVVBkpKSGD9+PPBLd99Aid199+vXjy5durB06VI2bdrEqVOnzuruO1BR3X137dqVYcOGFdndd3R0\n9Dm7+x43bhxz5swB/J0C5v+4//TTTwwaNIguXbowa9YsNm3adM7t3rp1Ky1atKBNmzaICDfccEPB\nuNTUVK677jo6d+7MPffcU+xy8q1evbpgm2+88UZWrVpVMK403YqXh9YgLK5ENw1ffY2046fZfmo7\nbePaBjskpSpGCXv6laGmdvc9cuRIHn74YVJSUli/fn1B8rrpppuYP38+3bp1Y8aMGSxbtqzUywz0\n5z//mcTERD788EP27NmD2+0u03LylaZb8fLQGoQlyu1GfD667zJ6VbVS5VRTu/t2uVz06dOHu+++\nmxEjRmC3+/tnS0tLo2HDhuTl5TFr1qxit719+/bs2bOnoDfYwAP0gd2FBzYjFdfN+MUXX1ywzbNm\nzWLQoEHFrr8iaYKwhHXpgr1OHYbsj9YEoVQ51dTuvsHfzDRz5swzjh088cQT9OvXj4EDBxYs81zC\nwsJ49dVXueqqq+jZsyf169cvGHf//ffz0EMP0aNHjzPOukpMTGTz5s0FB6kDvfjii7z55pt07dqV\nd955p0p7sa3U7r4rW3m6+y7KwYce5vjnnzDlTh9Lxy8nLiyuwpatVFXS7r5VvvJ09601iAAutxtn\nRg5t9vtYdWBVyTMoparEokWL6N69O507d2blypU88sgjwQ7pgqAHqQNEDhwITgeX7A5hZfJKrm51\ndbBDUkpxYXX3XZ1oDSKA3RVJZJ++9N1tZ9XBVXh81e8m4kopVVU0QRTicruJOZRGxOHTbDi6Idjh\nKKVU0GiCKMSV6Aagj95ESCl1gdMEUUhI06aEtG7F4L2RmiCUUhc0TRBFiHK7abozjYNHdpCclhzs\ncJSqsYLZ3fdTTz1Vpvl+85vfsHnz5mKneeWVV3j77bfLtPyaRBNEEVyJidi8Prrt1quqlSqPquzu\nu7BzJQhjTEGPrUV5/fXX6dixY7HL/u1vf8vkyZPLFV9NoAmiCOHdumGPieFSbWZSqswqsrtvt9vN\nPffcQ+/evenQoQNr165lzJgxtGnTpshrIh588EGysrLo3r07kyZNYs+ePbRr147JkyfTuXNn9u/f\nz+9+9zt69+5Np06d+Mtf/lIwr9vtJv8CXJfLxZ/+9Ce6detG//79CzrEC7xRkNvt5oEHHqBv3760\nbduWlStXApCZmcn1119Px44dGT16NP369aMiL+ytCnodRBHE4SBy8KV0+eoL/nnwWzLzMolwRgQ7\nLKXK5O/f/Z2tKedu4imL9nXa80DfB4qdpiK7+wYICQlh3bp1vPDCC1xzzTWsX7+eOnXq0KpVK+65\n5x7q1q1bsO6nn36al156iQ0b/Gci7tmzh+3bt/PWW2/Rv39/wH9/iDp16uD1ehk6dCg//vgjXbt2\nPWMbMjIy6N+/P08++ST3338/r732WpEJyePx8N133/HJJ5/w2GOPsWTJEl5++WXi4uLYvHkzP/30\nE927dy/jux08WoM4hyi3m9C0bBKS81hzaE2ww1Gqxqmo7r7z5XfR3aVLFzp16kTDhg0JDQ2lZcuW\n7N+/v8R4mjdvXpAcAObOnUvPnj3p0aMHmzZtKvK4Q0hISMHtQnv16sWePXuKXPaYMWPOmmbVqlUF\n29+5c+ezkk9NoDWIc4i85BJwOBiwy86K5BUMaTak5JmUqoZK2tOvDJXR3Xd+19Y2m+2Mbq5tNlup\nbjca2C347t27mTZtGmvXriUuLo6bbrqpyG7BnU4nIgKA3W4/53ry4ylumppIaxDnYI+OJqJXLwbs\ndrIieYXeREip81CR3X2XldPpJC8vr8hxp0+fJjIykpiYGI4cOcLixYvLta6iDBw4kLlz5wKwefNm\nNm6s4Lv6VQFNEMVwud3UOZgOh46yJWVLsMNRqsao6O6+y+K2226ja9euTJo06axx3bp1o0ePHrRv\n356JEycycODAcq2rKLfffjvHjh2jY8eOPPLII3Tq1Omc3ZRXV9rddzFy9+xh5/ArmX6ZjVa/uZPf\ndvttpa1LqYpU27r7rom8Xi95eXmEhYWxc+dOhg0bxrZt2wgJCanSOMrT3bcegyhGSEICIQkJDN6X\nwuzkFZoglFKllpmZSWJiInl5eRhjePnll6s8OZRXpSUIEZkOjACOGmM6B5TfCfwe8AKLjDH3W+UP\nAb+2yu8yxnxWWbGdD5fbTYuZ77D94EaOZx2nXni9YIeklKoBoqKiatx1D4VV5jGIGcDwwAIRSQSu\nAboZYzoB06zyjsB4oJM1z8siYq/E2ErNlZiIzeOly269iZBS6sJSaQnCGLMCSClU/DvgaWNMjjVN\n/iWU1wDvGmNyjDG7gR1A38qK7XxE9OyBLSqKgXvC9KpqpdQFparPYmoLDBKRb0VkuYjkn6bQGAi8\n0iXZKgs6cTpxDbqEHjt8rD7wNXneok+bU0qp2qaqE4QDqAP0B+4D5kr+VSilJCK3icg6EVl37Nix\nyojxLK7ERMJPZ3PRvgy+P/p9laxTKaWCraoTRDLwgfH7DvAB9YADQNOA6ZpYZWcxxrxqjOltjOkd\nHx9f6QGDdVW1zUbfncLy5OVVsk6laoNgdvd9vhISEjh+/DgAF198cZHTlCbWGTNmcPDgwYLXpek+\nvLqq6gQxH0gEEJG2QAhwHFgAjBeRUBFpAbQBvqvi2M7JERdHeM8eehxCqfMUzO6+y+Obb74p87yF\nE0Rpug+vriotQYhIErAaaCciySLya2A60FJEfgLeBaZYtYlNwFxgM/Ap8HtjjLeyYiuLKLeb+snp\npCXvYU/qnmCHo1S1F8zuvl955RXuu+++gtczZszgjjvuAGDUqFH06tWLTp068eqrrxYZu8vlKlOs\n8+bNY926dUyaNInu3buTlZV1RvfhSUlJdOnShc6dO/PAAw+csb6iuhUPtkq7DsIYM+Eco244x/RP\nAk9WVjzl5XK7OTrtOXrt8N9EKCEmIdghKVUqh596ipwtFdvdd2iH9jR4+OFipwlmd99jx45lwIAB\nBZ0Dzpkzhz/96U8ATJ8+nTp16pCVlUWfPn0YO3bsGfMGOt9Yr732Wl566SWmTZtG795nXqh88OBB\nHnjgAdavX09cXByXX3458+fPZ9SoUaXuVryqaV9MpRTSqhXOpk0ZtDecFQe0mUmpkgSzu+/4+Hha\ntmzJmjVrOHHiBFu3bi3ob+lf//pXwZ76/v372b59+zm3oayxFmXt2rW43W7i4+NxOBxMmjSJFSv8\nvyWl7Va8qmlXG6UkIrjcbtq8O5uN+9eRnpuOK8QV7LCUKlFJe/qVoTp09z1+/Hjmzp1L+/btGT16\nNCLCsmXLWLJkCatXryYiIgK3211kN98lKSnW81XabsWrmtYgzoPLPRh7npcOu/NYfWh1sMNRqtqq\nDt19jx49mo8++uiMmkxqaipxcXFERESwdetW1qwp/mZgZYk1KiqKtLS0s5bVt29fli9fzvHjx/F6\nvSQlJTF48OBybWNl0xrEeYjs0weJiKDfLg/L9y/nsuaXBTskpaqlpKSkMw7Cwi/dfb/88sssXbqU\njh070qxZsyK7+27QoEG5u/uOi4ujQ4cObN68mb59/R0zDB8+nFdeeYUOHTrQrl27M+4wV5TRo0ef\nd6w33XQTv/3tbwkPD2f16l92JBs2bMjTTz9NYmIixhiuuuoqrrnmmnJtY2XT7r7PU/Jdd3P4uxXc\n+4covhq3DJtoJUxVP9rdt8pXnu6+9dftPLkSE4k8lU3M3hQ2HS/+oJRSStVkmiDOk+vSQSBCrx3o\n2UxKqVpNE8R5ctStS3jXrgzaE8ry/drthqq+anLzsaoY5f0OaIIoA1diIg33Z3Jo32aOZh4teQal\nqlhYWBgnTpzQJHEBM8Zw4sQJwsLCyrwMPYupDFyJbo7985/02GlYmbySsW3HBjskpc7QpEkTkpOT\nqaoej1X1FBYWRpMmTco8vyaIMght2xZHw4YM3H2K5cnLNUGoasfpdNKiRYtgh6FqOG1iKgMRISrR\nTceduazfv5ocb06wQ1JKqQqnCaKMXG43jlwvLXZmsu5wzb4xuVJKFUUTRBlF9OuHhIfRb6dd7xGh\nlKqVNEGUkS00lMiLB9Jvl53l+5fp2SJKqVpHE0Q5uNyDiTqZjX33AXan7g52OEopVaE0QZSDy+qJ\nsdcOo/eqVkrVOpogysFZvz5K5S4cAAAgAElEQVRhnTszcE+oHodQStU6miDKyZXopum+LHbu/p7U\nnNRgh6OUUhVGE0Q5udxuxEDXHR6+OfhNsMNRSqkKowminMI6dsRevz79dzm0mUkpVatogignESHK\n7abrLh+r967E6/MGOySllKoQmiAqgMvtxpnjodGOk2w8vjHY4SilVIXQBFEBIgf0h9BQeu8QPd1V\nKVVraIKoALbwcFz9+zNgt4MVehMhpVQtUWkJQkSmi8hREfmpiHH3iogRkXrWaxGRf4nIDhH5UUR6\nVlZclcWV6Cb2RA4ZO37mUPqhYIejlFLlVpk1iBnA8MKFItIUuBzYF1B8JdDGetwG/KcS46oULrcb\n8F9VvfLAyuAGo5RSFaDSEoQxZgWQUsSo54H7gcDe7a4B3jZ+a4BYEWlYWbFVBmeDBoR2aM+A3U49\nDqGUqhWq9BiEiFwDHDDG/FBoVGNgf8DrZKusRnG53bTcm8umnWvI8mQFOxyllCqXKksQIhIBPAw8\nWs7l3CYi60RkXXW7325UYiJiDB22Z7P28Npgh6OUUuVSlTWIVkAL4AcR2QM0Ab4XkQbAAaBpwLRN\nrLKzGGNeNcb0Nsb0jo+Pr+SQz09Y587Y69al7y4by/VsJqVUDVdlCcIYs9EYU98Yk2CMScDfjNTT\nGHMYWABMts5m6g+kGmNq3KlAYrPhcg+mxy5YtW+53kRIKVWjVeZprknAaqCdiCSLyK+LmfwTYBew\nA3gNuL2y4qpsLreb0CwPsdsO8fPJn4MdjlJKlZmjshZsjJlQwviEgGED/L6yYqlKrosvBqeTXjs8\nrDywknZ12gU7JKWUKhO9krqC2SIjiezXz3+6qx6HUErVYJogKoHL7abesVyObfuBk9kngx2OUkqV\niSaISpB/VXX3HV5WHVgV3GCUUqqMNEFUgpAmjQlp04b+u+ysTNZuN5RSNZMmiEoS5XbTZp+H9btW\n4PF5gh2OUkqdt2IThIgMCRhuUWjcmMoKqjZwJSZi8xpabU1jw9ENwQ5HKaXOW0k1iGkBw+8XGvdI\nBcdSq4R364otNobeO9F7VSulaqSSEoScY7io1yqA2O1EDR5M7102Vu5dFuxwlFLqvJWUIMw5hot6\nrQpxJSYSnunBvmUX+9P2lzyDUkpVIyVdSd1SRBbgry3kD2O9bnHu2RRA5MCBYLfTa4ePFckrmNRh\nUrBDUkqpUispQVwTMDyt0LjCr1Uh9qgoIvr2of/O75mTvFIThFKqRik2QRhjzugrQkScQGf8N/05\nWpmB1RZRbjcNVq9h95Y1ZLoziXBGBDskpZQqlZJOc31FRDpZwzHAD8DbwP9EpNjO+JRf/lXVXbfn\nsebQmuAGo5RS56Gkg9SDjDGbrOGbgZ+NMV2AXvjvK61KENK8Oc6WLei706anuyqlapSSEkRuwPBl\nwHwA6yY/qpSi3Il02Ovl253L9CZCSqkao6QEcUpERohID2Ag8CmAiDiA8MoOrrZwuQdj9xoabz7G\nlpQtwQ5HKaVKpaQE8X/AHcCbwB8Cag5DgUWVGVhtEtGzJxLlotcOo81MSqkao9gEYYz52Rgz3BjT\n3RgzI6D8M2PMvZUeXS0hDgdRlw6mz247K/bpTYSUUjVDsae5isi/ihtvjLmrYsOpvVyJiUQuWkT2\nxo0cH3aceuH1gh2SUkoVq6Qmpt8ClwAHgXXA+kIPVUquSwaC3UbPHT69iZBSqkYoKUE0BF4FrgBu\nBJzAR8aYt4wxb1V2cLWJPTaW8B496bfTrschlFI1QknHIE4YY14xxiTivw4iFtgsIjdWSXS1TFRi\nIk2OeNi6ZRV53rxgh6OUUsUq1R3lRKQncDdwA7AYbV4qE1eiG4D2WzNYf1TfQqVU9VZSVxuPi8h6\n4I/AcqC3MebXxpjNVRJdLRPSogWOZk3ps0NvIqSUqv5KqkE8gr9ZqRvwN+B7EflRRDaKyI+VHl0t\nIyJEJybSea9h9a5lwQ5HKaWKVVKCaAEMAUZYj6utR/7wOYnIdBE5KiI/BZQ9KyJbrSTzoYjEBox7\nSER2iMg2EbmirBtU3bncbhweQ8zGvexJ3RPscJRS6pxKOki9t6gHsB//6a/FmQEML1T2BdDZGNMV\n+Bl4CEBEOgLjgU7WPC+LiP28t6YGiOjVCyIj6L1dr6pWSlVvJR2DiLb27F8SkcvF705gF3B9cfMa\nY1YAKYXKPjfGeKyXa4Am1vA1wLvGmBxjzG5gB9C3DNtT7UlICFGDLqXPLhsr9utV1Uqp6qukJqZ3\ngHbARuA3wFfAtcAoY8w1xc1YCrfgPyMKoDH+Wkm+ZKusVnK5BxOd5iXlh3Wk56YHOxyllCpSifek\ntu7/gIi8DhwCmhljssuzUhH5E+ABZpVh3tuA2wCaNWtWnjCCxjV4MEaE7tvz+ObgN1yecHmwQ1JK\nqbOUVIMouJrLGOMFkisgOdyE/yD3JPPLzREOAE0DJmtilZ3FGPOqMaa3MaZ3fHx8eUIJGkdcHOHd\nu9FHbyKklKrGSkoQ3UTktPVIA7rmD4vI6fNdmYgMx38nupHGmMyAUQuA8SISKiItgDbAd+e7/Jok\nKnEICYe8rNv0Oe9sfoe03LRgh6SUUmco6SwmuzEm2npEGWMcAcPRxc0rIknAaqCdiCSLyK+Bl4Ao\n4AsR2SAir1jr2QTMBTbjvynR760aS63lcg8G4LIDdXlm7TMMe28YT337FLtTdwc5MqWU8pOafAvM\n3r17m3Xr1gU7jDIxxrBz6DBC27Xj9F9/z+wts1m8ezF5vjwGNh7IpPaTGNh4IDYpVW8oSilVaiKy\n3hjTu6Tp9NcnSEQE17ChpC9bRvQj/+YhfsXnYz7jju538HPKz9z+5e2MnD+SWVtm6ZlOSqmg0BpE\nEHnT0znx+uucmvse3pQUQpo3J27iBCJGjuCrU98xa8ssfjj2A5HOSEa1HsWE9hNoHt082GErpWq4\n0tYgNEFUA77cXNI++4yTs2aTtWEDEh5OzIgRxE2ayI56HmZtmcWnez7F4/MwqPEgJnWYxIBGA7T5\nSSlVJpogaqisTZs4OXs2pz9ehMnJIbxXL+ImTiB3UE/m7ZrPnG1zOJF9goToBCZ2mMjIViOJdEYG\nO2ylVA2iCaKG8546xakPPuRkUhJ5+/djj69H3HXX47p2NF9mb2D2ltlsPL4Rl9NV0PzULLpmXjio\nlKpamiBqCePzkbFyJSmzZ5OxYiXYbEQNG0bcxInsbBHKrK2z+XzP53iNl0ubXMrEDhMZ0HAAIhLs\n0JVS1ZQmiFood/9+Tia9y6n338eXmkpom9bETphA3mUXM+/AIuZum0tKdgotY1oysf1Erm51NRHO\niGCHrZSqZjRB1GK+7GxOL/qEk7Nmkb15M7bISGJGjcI17lq+sm9n5paZbD6xmShnFKPbjGZ8+/E0\njWpa8oKVUhcETRAXAGMM2T/8QMrs2aQt/hSTl0dE//7ETZjAri51mb19Dl/s/QKv8TK46WAmdZhE\nvwb9tPlJqQucJogLjOfECU7Ne5+T776L59AhHA0aEDd+HHm/Gsy8E0uY9/M8UrJTaBXTiokdJjKi\n5QhtflLqAqUJ4gJlPB7Sly3j5OzZZHyzGpxOoq+4AteE61gWfZBZW2ezJWULUSFRjG0zlvHtx9PY\nVWtvvaGUKoImCEXOrl2cnJ1E6vz5+NLTCe3YgbgJE9nTrwmzds9jyd4lGAzuJm5u6XIL3eK7BTtk\npVQV0AShCvgyMkhduJCTs2aTs307tpgYYkePxjNqGO9nfs17P79Hak4qEztM5K4ed2nTk1K1nCYI\ndRZjDFnr1pEyazZpS5aAx0PkpYOIGDeWVyPWkvTzHJpGNeWJgU/Q66JewQ5XKVVJNEGoYuUdOcqp\nuXM5NXcunmPHCG3ThpP3TORPJ2dwMP0gkzpM4q6edxHuCA92qEqpCqYJQpWKycvj9Gefc3TaNDxH\njhB1w0RmXuJl1p55NItqxhMDn6DnRT2DHaZSqgLp/SBUqYjTScyIq2j58UJix48j7Z1ZXPvEKmbU\n/SNe4+WmT2/i79/9nSxPVrBDVUpVMU0QCgC7y0XDv/yF5u+8jdjtRPy/Z3htfXcmNRnFzC0zuW7h\ndfzv6P+CHaZSqgppglBniOjThxYfzafurb8h/aOPGTN1GW9F3I7H52HK4ik8s/YZrU0odYHQBKHO\nYgsLo/6995Iwdw72evUI//O/+O/yNtzY4Gre2fyO1iaUukBoglDnFN6pEy3mziH+nnvIWraCkY9+\nyVu+m8jz5DJl8RSeXfus1iaUqsU0QahiidNJvf+7jRbzPyS0VSvC//46ryxuzE11fsXbm9/muoXX\nseHohmCHqZSqBJogVKmEtmxJ85nvcNGfHyF3w4/86i9f8Fb6ODx5uUxePJln1z5Ltic72GEqpSqQ\nJghVamKzUWfSJFouXEBEr16EvziLf38Qxy2uy7U2oVQtpAlCnTdn48Y0ffW/NPr703h372X41M95\n++hI8nKzmbx4MtPWTtPahFK1QKUlCBGZLiJHReSngLI6IvKFiGy3nuOschGRf4nIDhH5UUT00t1q\nTkSIueYaWi76GNewoYS98QEvzQrnNyFDeGvzW1qbUKoWqMwaxAxgeKGyB4EvjTFtgC+t1wBXAm2s\nx23AfyoxLlWBHPXq0eT552ny0ouYk6e47IkveHv3Zfiys5jy6RSeW/ec1iaUqqEqLUEYY1YAKYWK\nrwHesobfAkYFlL9t/NYAsSLSsLJiUxUvatgwWi76mNixYwl7dzH/fNPG/3kvYcamGVy38Dp+OPZD\nsENUSp2nqj4GcZEx5pA1fBi4yBpuDOwPmC7ZKlM1iD06moZPPE6zGW8iBhL/vpR3fhoIGZlMXjyZ\nf6z7BznenGCHqZQqpaAdpDb+bmTPuytZEblNRNaJyLpjx45VQmSqvCL796flgo+oc/PNhC5ayXOv\nerg9vR9vbnqT6xZex4/Hfgx2iEqpUqjqBHEkv+nIej5qlR8AmgZM18QqO4sx5lVjTG9jTO/4+PhK\nDVaVnS08nIseuJ+Ed5NwxMRw6b9WMvPbXthT07lx8Y38Y73WJpSq7qo6QSwApljDU4CPAsonW2cz\n9QdSA5qiVA0W3rUrLd6fR7077yBk5fc8/Z9M7j7ekzc3Tuf6hdez8djGYIeolDqHyjzNNQlYDbQT\nkWQR+TXwNHCZiGwHhlmvAT4BdgE7gNeA2ysrLlX1JCSE+N//npYfvE9I8+YMeHUNM7/qhPN4Kjcs\nvoHn1z+vtQmlqiG9o5yqUsbr5eTMmRz95wtgs/HdmHZMa/wDLWJb8deBf6VLfJdgh6hUrad3lFPV\nktjt1JkyhZYLPiK8axf6vPM9Mz9pRcShU9yw+AZe+eEVavJOi1K1iSYIFRQhTZvSbPp0Gj75V0J3\nH+LR/5zivq2t+c/3L3H/ivv14jqlqgFNECpoRITYsWNp+fHHuC4dRK8PNvPqRw1YvelTbvnsFo5l\n6mnMSgWTJggVdM6L6tPkxRdp9OwzxOw5wX+Sosjbso0JiyawNWVrsMNT6oKlCUJVCyJCzNVX03zW\nTMIcYTz+joeeP/qvwF66b2mww1PqgqQJQlUr4Z060eK9uYR37sLN753k1q/DuefLu5n+03Q9eK1U\nFdMEoaodR716NH9zOrHXX88lS4/yzCd1eOXrf/Dnr/9Mrjc32OEpdcHQBKGqJQkJoeHjj9HgL4/S\nbEsKL8+J5rvv5nPr57dyMvtksMNT6oKgCUJVa3ETJtBs+htEZ8Hzs5zYvvuBCYsmsPPUzmCHplSt\npwlCVXuRffuS8N57hDdN4L45uQxadoIbFk1i1YFVwQ5NqVpNE4SqEUKaNCZh9iyiL7+CMV+kc9ci\n+MOntzNryyw9eK1UJXEEOwClSssWEUHj5//BiXZt6f7Cv3jueDSPZv6N3am7eaDvAzhtzmCHqFSt\nojUIVaOICPV+9zua/PslLjru4YWZIfzvy3e5fcntpOakBjs8pWoVTRCqRooaOpQWc97FFRPP40kQ\n+dkabvjkBvae3hvs0JSqNTRBqBortE0bWsydQ1TfvvzfIg9XzE/mxgUT+O7Qd8EOTalaQROEqtHs\nsbE0ffVV6kyZwtBvs7kvKZt7P7qNeT/PC3ZoStV4miBUjScOBxc99CAN//Y3Wu/z8Ow7wvSPpvLM\n2mfw+rzBDk+pGuvCTRBeT7AjUBUsdvQoEma+Qx1bFH+fKWz98C3u+uou0nPTgx2aUjXSBZkgsnev\nIX1aV7yb5oOeQ1+rhHfrRot583C168h9H/ho8O5yJi+6gQPpB4IdmlI1zgWZIFbuOMH+DBv296Zw\n6r+/gqNbgh2SqkDOi+rT/J23ibnmGq5d6WXMW7u4+YPxbDi6IdihKVWjXJAJYtiwX7F37GKec9wK\nh37A+/LFpM2/F7JOBTs0VUFsoaE0fPpvXPTQg/T62csD01N54N2bWLhzYbBDU6rGkJrcTUHv3r3N\nunXryjx/dp6Xt7/8nuhvnuZ6+ZLskFgcl00lpPdksF2QubNWSv/6a5LvuYdMTxbPXOPj4qv/jzt6\n3IFN9DNWFyYRWW+M6V3idBdygsh38FQWMz9cSOLuZ+lj+5mTsZ2JHfs80rRvBUSpqoPcvXvZ97vb\nydmzmzeHCr4xl/PXS54kwhkR7NCUqnKlTRC6CwU0ig3n/puvh5s/5dnIe8k9mYy8cRknZ/0a0o4E\nOzxVAUKaN6fF3DlEu938+gsfrV75jF9/PJkjGfr5KnUuWoMoxOszfLhmK2lf/J1JvgX47KF4B91H\n5KA7wBFSoetSVc/4fBx78UVO/OcVtjexM31CPZ4c9W861e0U7NCUqjLVugYhIveIyCYR+UlEkkQk\nTERaiMi3IrJDROaISFB+je024dqLOzDm/td4rUsS33jaEbn8MU79ow+en78IRkiqAonNRv2776bx\nP5+nzXEHD/z3OI+9cSOf7/k82KEpVe1UeYIQkcbAXUBvY0xnwA6MB/4OPG+MaQ2cBH5d1bEFigl3\n8vtrr6DZHQt5Lv6vnEzPwjH7Wo6/NgZSdgczNFUBoocPp0VSEnUi43nk7Ww+/Pc9vPrjq3pvCaUC\nBOsYhAMIFxEHEAEcAoYA+R3ovAWMClJsZ2hdP4o/3n4Hu6//kleckwlL/pq8F/tw6uNHITcj2OGp\ncgjr0IFW779PVI+e3LXQR8pz/+ThFQ+S480JdmhKVQtVniCMMQeAacA+/IkhFVgPnDLG5Pd/kQw0\nrurYzkVEGNK5KTc/8E8+GPgRi339iV33AqendSfr+zl6NXYN5qhTh4TpbxI7YQLXfGvo8veF/G7+\nZLalbNPahLrgVflBahGJA94HxgGngPfw1xymWs1LiEhTYLHVBFV4/tuA2wCaNWvWa+/equ///2ha\nNnM/mId757N0tu3hWJ3e1L32eWyNulZ5LKrinJwzl0OPP8aRGMPbiUJa91Zc3m4EV7a4kqZRTYMd\nnlIVptpeByEi1wHDjTG/tl5PBgYA1wENjDEeERmAP2FcUdyyKuMspvPxw94TfD3vecaffpMYySSl\n/STiRz4OEXWCFpMqn8x169h/zx/wHTtBdpidb1v7WN1e8PXpwhVtRnBFwhXER8QHO0ylyqU6J4h+\nwHSgD5AFzADWAZcC7xtj3hWRV4AfjTEvF7esYCcIAJ/PsOi7zWR+/leu9S4m2xGF1/0I0QN/AzZ7\nUGNTZWPy8shY8y2nP13M6S++wJxOIyvMxrdtDGs62Ant34fhbUYwtNlQYkJjgh2uUuet2iYIABF5\nDH8Tkwf4H/Ab/Mcc3gXqWGU3GGOKPVpYHRJEvowcD3MWfUrHDU/S37aZY652RI95ntCWA4MdmioH\nk5tLxpo1nF78KalffA7pGWSG2fi2reG7jk5iBw5ieOsRDG46mHBHeLDDVapUqnWCqCjVKUHk23s8\nncVz/8vVR/5NYznBoWYjaDD2GSSm2hxzV2Xky80l4+uv/cniyyVIRiYZ4cKatrC+cxgNBg3jytYj\nGNBoAE6bM9jhKnVOmiCC7Oste9n94ZNcl/MBxmYnve8fqHfZH8ERGuzQVAXw5eSQ8fXXpH7yCae/\n/BLJyiYtwp8sNnaNotmlVzK89VX0uqiXdgqoqh1NENVAntfH/K++oc6qqQxlLSmhjQm96hkiu44I\ndmiqAvmys8lYtYpTn3zC6aVLsWXncDpCWNMOtvSoS+vBV3Nl66voWKcjIhLscJXSBFGdnEjPYcEH\nMxm0YxqtbQc5ED+IBtc/jz2+TbBDUxXMl5VF+oqVnPzkY9KXLceWk8upSFjTTtjduxHt3aO4stVV\ntIhpEexQ1QVME0Q1tCn5OOvmPM2Y0zMJkzyOdbqFRiMfhdCoYIemKoEvM5P0FSs4sWghmctXYsvN\nI8UF37YTDvZrQWf3tQxvdSUNIhsEO1R1gdEEUU0ZY/hy7UayP/sLI7xL8WAn1xZOni0Mrz0Mrz0c\nryMc4wjHOMPBGYGERGAPCccW6sIeGoEzLLLgYQuJAGfgI9x6RPzyXJW90BoD3jzw5VnPHv+joMxz\n5riipvV5wfjAeMGX/xxYZg2fVZY/feGy/Ol8Z5QZnxefz4fxeTE+j/XsxRiDM7Yh9jotoU4LiGsB\ncc3LdfzIl5FB+vLlHPv4I7JXfYMt18OJKH/NImVgB7q7r+OyFlcQFxZXgR+GUkXTBFHNZeV6+WjR\nAti2CIcnC7s3G6cvC6cvh3ByCJccwsklnBzCxP8cTi7hknve6/KKHY/NSj72MHxWAsIZDiH+JCM2\nO/jyMN48JP9H3Of/0Rbrx1t8eYj1jM+DzedBjL/MP+zBZryV8G6VjRcbPmzWs+A1+a+loDx/Gp+R\ngmGAi+QkLskuWJZByApvgDc2AWd8K0LjWyGBCSQsuvRxpWeQ/tVXHFn4AXnffIfN4+V4NHzb3k7G\npd3o6R7HkOZDiXRGVvh7UixjIOsknD4IaYfg9EHM6YP4ctL9zaHxHaB+ewjTaz9qOk0QNZTPZ8jK\n85KZ6yUz10NGjpesPP9zZq6HzJw8crIyyM3KIC87A0+O/2FyM/HlZGDysiAvE8nLQjxZOLxZ2DzZ\nOH3ZZySbiEKJx44XD3Y8OMjDbg3byTNFlOHAY/KHi5rHETCtHW/+dAHL8oodLw68Ngc+HBibA584\nwOYAmx0RG2K3+xOXzY6If9hm8z+LzYHY7djsdsRms8od2OwObDY7dpsNu92Gwy7YbYLDZrOeJeA5\ncPwvz4hwLDWLlGMH8ZzYhTN1L3Vzk2kmR2kuR2gmR4iX02d8btnOOHKim2Gr05Lwi1rjqNfql+Th\nqg/nODjtTUsjbelSDi18H9+a9dg8Po7GwLoOTnIH9SSyaQvCY+sS6YojOiyG6JBookKizngOtYeW\nfPDbk2P96B+CNP8Pf27KAXJOHcCkHsSecYSw7KM4fGdfepRjnIRKXsHr9ND6ZMe2xX5RB1xNO+Fs\n0Ani259XklTBpQlCnSE/8WTkesjMCUhAuV6ycj3keg0Om2AT/w+l3Yb/R1YEmw3sVrnN+hH9ZTr/\ncP4PrM0mBfM4AucvNF1NO5snM9dD8sks9p3IZF9KJoePHSP32C5sp3YTnr6Pxr7DNJMjNJejNJLj\n2OWX/6tcWzhZkU3xxSUQEt+a8ItaY6trJY+YpmB3AOA9fZrTX37JgQVzke9+xOb1FSzDY4OMMMgI\nhcwwyAgVMsMgMxSywu14w534wp1IuANCBXGAw5FHiGQTIZnEmQyijI9on48on//Z6XWQ7o3lOHU4\nbOI4bOpwyl6PnPD6+FwNscU2Jiy2IaGhIaQf2Y0c24Lr9A6aePbSVpJpLQfPqNGmOuuTFt0aX732\nhDfuRFxCVxwXddBjbNWQJgilqogxhmPpOexPyWJ/SibJx1NJP7ILc2IXIWl7ic0+YCUPfwIJ3Bv3\nYic9vBF50c2x12tJRIM2hMa3wuuIJ2PLAbzHDpJ37ABZJw6RlXKc7NRTeNMzISsHyfZiyzU4csHu\nKT7hemz+ZPJLkpGC17nhTjwRYRAVgURFYouKxhEdTUhMHKGxcYS6YrFZ3cYIQk6ej5OZeZxMzyEz\n9QQm7TDOzONE5h6nnjlJPKk4rcY6wZAhUWSG1MPnughHdCPC45oQVb8pDkc4Iv5lBv6RXyZnlGJ3\nOgmJiCI0IopQRxgh9hBC7aEFjxB7iF5zUkqaIJSqJnI8Xg6czGL/ySz2nUjn1JF95B7die3UbiIz\n9tPQd4hmcpQEOUyMZBa7rEwTymETxxFTh8PEcULqkhlWH29oPI6QOMJDY4h0RlDPZogzOUR7sgnJ\nOY1JP0n2qRQ8p1PxnE7FpGdAega29CzsGTk4cj3Frre6yXZCTuDDAblOyA2x4Qmx4wmx4w114Al1\nYEKd+EKd+MJCIDQEwsIgLBQJD8MWHo4tPAJ7eAT28HAcES4cEZGEhkYUJKCwgGQUYg/BLnZ8xnfG\nw2Dw+rwYDD7jw2v8JzucMR0B0/t8eD15mLw88Hnx5uWB14vxeM544PXi83iQ/HFeD3i8GK+Xlu36\n0afvNWV6/0qbIBxlWrpSqtRCHXZaxrtoGe8C4oEWwGDAX/tIzcpjX0omK1MyOXrkMFlHdmBSduHI\nOIw3NA5fVEMcMY0IrdOEuDp1uSg6nPrRYXSODsUV6qiQ5jqTm4s3PR3f6dN409Lwnj6NLy2N3NST\n5KSlFsRq8O9QGgFM/it+KcdgRKxx+WX+8ozsXE6fOkbe6eP4Mo7hyE4h3HuKKJOGDX9zmg9II4I0\neww5IbF4w+pgc9UlLLoe4U4HJicLk50F2VmQnY0tO5vw7BwicnKQnFxs2bn8//buPUausg7j+PeZ\nOTN7KYZaUXoN1IraxtByE7BGEjBRoqJ/SLSxJpIYQ4KKxsSAMQT/JF6iicZo6i2x8VZJNGqUBEHR\nmBYpLdBWTK0tFEtaQRDa3Z3bzz/O2e3u9rTdrbt9d3ueTzo5Z86cd/qbt9195pwz8761F9vUWh2y\nkTb11hBZq4um+T64U34qp78AAAbCSURBVJsYQEfH1kVPUO9BvRfFEmo9xtbHb8tO9tgMvC/f9559\ncIYBMVUOCLOEJLFwsMnCwSaXLl8ILAUuP/t1NJtkixbBorM/VH230+bwgT38Z/9jtA/t4rznnmT5\ny//gwvZ2GuRHNr1j4nleMRZI9Be3MScPyV4IukAXoiOiB3SK9a6IDtAR3S50uvmSbt6m0RELRtt1\ngWPKa5CIWnHLakStuNVrUK8TtWJZr9OpZ3SyDNUzyDLUaKKsgRpNao0mtWZfsewna/ZR7x8g6xug\n0TdIY2CAev8g9WY/qmfUsox6ow9lGa9dvGSm/ylO4IAws6TqWYMlqy5lyapJE25127SP7OX5/Y9x\n7OATdF96Np+8MaBHUPwhokdE/ind/H4US8aOZPLHYtw+QPTG1sfaFfsR+f0ejB0pxdjOHeq9Flmv\nRdYboRFtsmjRiBbNGKFBiz7a9BXL/nHXnE6qSz75wRD5HJuTtKNOWxktmgzTpK0GB1dt4OqNd59R\nn0+VA8LM5qZ6g8bi1Vy4eDX57ADzR0TQ7gYjnS5H211arWHarWE6w0O0W0N0WkN0W0N0R4bptofp\ntYfotYbptYfpdUagM0y08yWdYdQZQd0RaqO33gi185fO+utwQJiZzTBJNDPRzGrQ32DS+bB5w58J\nMzOzUg4IMzMr5YAwM7NSDggzMyvlgDAzs1IOCDMzK+WAMDOzUg4IMzMrNa9Hc5V0BDhwhs0vAP49\ng+XMd+6Pidwfx7kvJjoX+uOiiHj16Xaa1wHx/5D016kMd1sV7o+J3B/HuS8mqlJ/+BSTmZmVckCY\nmVmpKgfEt1MXMMe4PyZyfxznvpioMv1R2WsQZmZ2alU+gjAzs1NwQJiZWalKBoSkd0p6UtJeSXek\nriclSSskPSBpt6Rdkm5PXVNqkuqSHpX0q9S1pCZpoaQtkv4maY+ka1PXlIqkTxc/I09I+pGk+TkL\n0DRULiAk1YFvADcCa4ANktakrSqpDvCZiFgDXAPcVvH+ALgd2JO6iDnia8BvI+KNwFoq2i+SlgGf\nBK6MiDcBdeCDaauafZULCODNwN6I2BcRLeDHwHsT15RMRByKiO3F+kvkvwCWpa0qHUnLgXcBm1LX\nkpqk84G3Ad8BiIhWRLyQtqqkMmBAUgYMAv9KXM+sq2JALAOeHnf/IBX+hTiepIuBy4CtaStJ6qvA\nZ4Fe6kLmgJXAEeB7xSm3TZIWpC4qhYh4BvgS8BRwCHgxIu5LW9Xsq2JAWAlJ5wE/Bz4VEf9NXU8K\nkt4NHI6IR1LXMkdkwOXANyPiMuAoUMlrdpJeSX6mYSWwFFggaWPaqmZfFQPiGWDFuPvLi22VJalB\nHg6bI+Le1PUktB64SdJ+8lOP10v6YdqSkjoIHIyI0SPKLeSBUUVvB/4ZEUciog3cC7wlcU2zrooB\n8TBwiaSVkprkF5p+mbimZCSJ/Bzznoj4Sup6UoqIOyNieURcTP7/4vcRcc6/SzyZiHgWeFrSG4pN\nNwC7E5aU0lPANZIGi5+ZG6jABfssdQFnW0R0JH0c+B35JxG+GxG7EpeV0nrgw8DjknYU2z4XEb9J\nWJPNHZ8ANhdvpvYBtySuJ4mI2CppC7Cd/JN/j1KBITc81IaZmZWq4ikmMzObAgeEmZmVckCYmVkp\nB4SZmZVyQJiZWSkHhNkkkrqSdhSjdv5M0uA022+azoCHkj4i6evTr9RsdjkgzE40FBHrilE7W8Ct\nU20oqR4RH42Iqn6hzM4hDgizU3sIeB2ApI2SthVHF98qho5H0suSvixpJ3CtpAclXVk8tkHS48XR\nyD2jTyrpFkl/l7SN/MuKo9tvLvbdKemPZ/WVmk3igDA7iWJY5xvJv2W+GvgAsD4i1gFd4EPFrguA\nrRGxNiL+NK79UuAe4HpgHXCVpPdJWgJ8gTwY3ko+L8mou4B3RMRa4KZZfYFmp1G5oTbMpmBg3LAj\nD5GPVfUx4Arg4XwoHgaAw8U+XfLBDie7CngwIo4ASNpMPr8Ck7b/BHh9sf3PwPcl/ZR8QDizZBwQ\nZicaKo4SxhQDtP0gIu4s2X84Iroz8RdHxK2SriaftOgRSVdExHMz8dxm0+VTTGZTcz/wfkmvAZC0\nSNJFp2mzDbhO0gXF9YoNwB/IJ2S6TtKriqHWbx5tIGlVRGyNiLvIJ+tZUfbEZmeDjyDMpiAidkv6\nPHCfpBrQBm4DDpyizSFJdwAPAAJ+HRG/AJB0N/AX4AVgx7hmX5R0SbH//cDOWXg5ZlPi0VzNzKyU\nTzGZmVkpB4SZmZVyQJiZWSkHhJmZlXJAmJlZKQeEmZmVckCYmVmp/wHKv4H1/USYggAAAABJRU5E\nrkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UySPl7CAQ28C",
        "colab_type": "text",
        "slideshow": {
          "slide_type": "slide"
        }
      },
      "source": [
        " ## 任务 3：尝试其他标准化方法\n",
        "\n",
        "**尝试对各种特征使用其他标准化方法，以进一步提高性能。**\n",
        "\n",
        "如果仔细查看转换后数据的汇总统计信息，您可能会注意到，对某些特征进行线性缩放会使其聚集到接近 `-1` 的位置。\n",
        "\n",
        "例如，很多特征的中位数约为 `-0.8`，而不是 `0.0`。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "QWmm_6CGKxlH",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 707
        },
        "outputId": "7e023094-e653-4d16-bfcb-b9ec0863f255"
      },
      "source": [
        "_ = training_examples.hist(bins=20, figsize=(18, 12), xlabelsize=2)"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nJPliVW1Y7vYrxTiHZxxiBOMcpnGIccwNta1eK5/XWqjHWqgDWI9Rs1bqMWYWbKdh+8+rR9la/b2z\nXuPFei3eSt9O8xLggCT7J7kP8BzgvBWOQZI0P9tqSRptttOSxsqK9nioqm1JXgx8ku7WP2dV1RUr\nGYMkaX621ZI02mynJY2bFZ/joaouAC7o8RDj0p3MOIdnHGIE4xymcYhxrA25rV4rn9daqMdaqANY\nj1GzVuoxVlbgnHrUrdXfO+s1XqzXIqWqhr1PSZIkSZIkYOXneJAkSZIkSTuQNZd4SHJUkt1WO465\nJPkfSR6V5NeTHL3a8cwmyUmjHiMY5zCNw+8ljMd7qbsb9TZ5sab/RlY7ju3R/n7Wr3Yc22u6HVjt\nOLbXWvg81sLfhcZT+/v59dWOY9iSHJ3kl1Y7jmFqdTp4teMYtrXQhs8myf9MckAv+3aohSRJkiRJ\n6sua6/EgSZIkSZJGh4kHSZIkSZLUGxMPkiRJkiSpNyYeJEmSJElSb0w8SJIkSZKk3ph4kCRJkiRJ\nvTHxIEmSJEmSemPiQZIkSZIk9cbEgyRJkiRJ6o2JB0mSJEmS1BsTD5IkSZIkqTcmHiRJkiRJUm9M\nPEiSJEmSpN6YeJAkSZIkSb0x8SBJkiRJknpj4kGSJEmSJPXGxIMkSZIkSeqNiQdJkiRJktQbEw+S\nJEmSJKk3Jh4kSZIkSVJvTDxIkiRJkqTemHiQJEmSJEm9MfEgSZIkSZJ6Y+JBkiRJkiT1xsSDJEmS\nJEnqjYkHSZIkSZLUGxMPkiRJkiSpNyYeJEmSJElSb0w8SJIkSZKk3ph4kCRJkiRJvTHxoF4l2Zzk\nN3o+xtYkvzDE/VWShw1rf5IkSdKoSzKV5HeXue1D2zn5TsOOS2uDiQeNvap6QFVdDZDk3UlOWe2Y\nJGkcJTk5yV+3572fRCb5yyR/3Nf+JUn9mHlxsaq+1c7J71zNuDS6dl7tACRJ0uipqm8BD+j5GP+l\nz/1LkqTRYI8HrYgkuyR5c5Jvt8ebk+zSlk0muTbJxiQ3JrkuyQsHtn1wko8n+X6SS5KckuTzA8sr\nycOSHAccBbyiXaX7+ODygfXv1isiyR+1Y347yYtmifvPknwryQ3t6tyu/b1TkiRJ2tG1HgUnJrky\nyc1J3pXkvm3Z7yXZlOSmJOcl2Xtgu0rykiRXJ/lukv8vyb3asrt6tbXX69r697gYneQXk3wmyffa\n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\n",
            "text/plain": [
              "<Figure size 1296x864 with 9 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Xx9jgEMHKxlJ",
        "colab_type": "text"
      },
      "source": [
        " 通过选择其他方式来转换这些特征，我们可能会获得更好的效果。\n",
        "\n",
        "例如，对数缩放可能对某些特征有帮助。或者，截取极端值可能会使剩余部分的信息更加丰富。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "baKZa6MEKxlK",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def log_normalize(series):\n",
        "  return series.apply(lambda x:math.log(x+1.0))\n",
        "\n",
        "def clip(series, clip_to_min, clip_to_max):\n",
        "  return series.apply(lambda x:(\n",
        "    min(max(x, clip_to_min), clip_to_max)))\n",
        "\n",
        "def z_score_normalize(series):\n",
        "  mean = series.mean()\n",
        "  std_dv = series.std()\n",
        "  return series.apply(lambda x:(x - mean) / std_dv)\n",
        "\n",
        "def binary_threshold(series, threshold):\n",
        "  return series.apply(lambda x:(1 if x > threshold else 0))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-wCCq_ClKxlO",
        "colab_type": "text"
      },
      "source": [
        " 上述部分包含一些额外的标准化函数。请尝试其中的某些函数，或添加您自己的函数。\n",
        "\n",
        "请注意，如果您将目标标准化，则需要将网络的预测结果非标准化，以便比较损失函数的值。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8ToG-mLfMO9P",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def normalize(examples_dataframe):\n",
        "  \"\"\"Returns a version of the input `DataFrame` that has all its features normalized.\"\"\"\n",
        "  #\n",
        "  # YOUR CODE HERE: Normalize the inputs.\n",
        "  #\n",
        "  pass\n",
        "\n",
        "normalized_dataframe = normalize(preprocess_features(california_housing_dataframe))\n",
        "normalized_training_examples = normalized_dataframe.head(12000)\n",
        "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
        "\n",
        "_ = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0007),\n",
        "    steps=5000,\n",
        "    batch_size=70,\n",
        "    hidden_units=[10, 10],\n",
        "    training_examples=normalized_training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=normalized_validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GhFtWjQRzD2l",
        "colab_type": "text"
      },
      "source": [
        " ### 解决方案\n",
        "\n",
        "点击下方即可查看一种可能的解决方案。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OMoIsUMmzK9b",
        "colab_type": "text"
      },
      "source": [
        " 以上这些只是我们能想到的处理数据的几种方法。其他转换方式可能会更好！\n",
        "\n",
        "`households`、`median_income` 和 `total_bedrooms` 在对数空间内均呈现为正态分布。\n",
        "\n",
        "如果 `latitude`、`longitude` 和 `housing_median_age` 像之前一样进行线性缩放，效果可能会更好。\n",
        "\n",
        "`population`、`totalRooms` 和 `rooms_per_person` 具有几个极端离群值。这些值似乎过于极端，以至于我们无法利用对数标准化处理这些离群值。因此，我们直接截取掉这些值。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XDEYkPquzYCH",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 567
        },
        "outputId": "95abc269-2d72-4373-d815-2cef424a596b"
      },
      "source": [
        "def normalize(examples_dataframe):\n",
        "  \"\"\"Returns a version of the input `DataFrame` that has all its features normalized.\"\"\"\n",
        "  processed_features = pd.DataFrame()\n",
        "\n",
        "  processed_features[\"households\"] = log_normalize(examples_dataframe[\"households\"])\n",
        "  processed_features[\"median_income\"] = log_normalize(examples_dataframe[\"median_income\"])\n",
        "  processed_features[\"total_bedrooms\"] = log_normalize(examples_dataframe[\"total_bedrooms\"])\n",
        "  \n",
        "  processed_features[\"latitude\"] = linear_scale(examples_dataframe[\"latitude\"])\n",
        "  processed_features[\"longitude\"] = linear_scale(examples_dataframe[\"longitude\"])\n",
        "  processed_features[\"housing_median_age\"] = linear_scale(examples_dataframe[\"housing_median_age\"])\n",
        "\n",
        "  processed_features[\"population\"] = linear_scale(clip(examples_dataframe[\"population\"], 0, 5000))\n",
        "  processed_features[\"rooms_per_person\"] = linear_scale(clip(examples_dataframe[\"rooms_per_person\"], 0, 5))\n",
        "  processed_features[\"total_rooms\"] = linear_scale(clip(examples_dataframe[\"total_rooms\"], 0, 10000))\n",
        "\n",
        "  return processed_features\n",
        "\n",
        "normalized_dataframe = normalize(preprocess_features(california_housing_dataframe))\n",
        "normalized_training_examples = normalized_dataframe.head(12000)\n",
        "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
        "\n",
        "_ = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.AdagradOptimizer(learning_rate=0.15),\n",
        "    steps=1000,\n",
        "    batch_size=50,\n",
        "    hidden_units=[10, 10],\n",
        "    training_examples=normalized_training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=normalized_validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Training model...\n",
            "RMSE (on training data):\n",
            "  period 00 : 86.90\n",
            "  period 01 : 76.35\n",
            "  period 02 : 74.02\n",
            "  period 03 : 77.25\n",
            "  period 04 : 72.45\n",
            "  period 05 : 71.56\n",
            "  period 06 : 70.26\n",
            "  period 07 : 70.18\n",
            "  period 08 : 69.72\n",
            "  period 09 : 69.20\n",
            "Model training finished.\n",
            "Final RMSE (on training data):   69.20\n",
            "Final RMSE (on validation data): 69.09\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nqv0Dgg4BZO+GgGgAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "b7atJTbzU9Ca",
        "colab_type": "text",
        "slideshow": {
          "slide_type": "slide"
        }
      },
      "source": [
        " ## 可选挑战：仅使用纬度和经度特征\n",
        "\n",
        "**训练仅使用纬度和经度作为特征的神经网络模型。**\n",
        "\n",
        "房地产商喜欢说，地段是房价的唯一重要特征。\n",
        "我们来看看能否通过训练仅使用纬度和经度作为特征的模型来证实这一点。\n",
        "\n",
        "只有我们的神经网络模型可以从纬度和经度中学会复杂的非线性规律，才能达到我们想要的效果。\n",
        "\n",
        "**注意**：我们可能需要一个网络结构，其层数比我们之前在练习中使用的要多。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "T5McjahpamOc",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#\n",
        "# YOUR CODE HERE: Train the network using only latitude and longitude\n",
        "#"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "P8BLQ7T71JWd",
        "colab_type": "text"
      },
      "source": [
        " ### 解决方案\n",
        "\n",
        "点击下方即可查看可能的解决方案。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1hwaFCE71OPZ",
        "colab_type": "text"
      },
      "source": [
        " 最好使纬度和经度保持标准化状态："
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "djKtt4mz1ZEc",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 567
        },
        "outputId": "fcf1b600-8bdf-4ad6-960c-3e2f48617780"
      },
      "source": [
        "def location_location_location(examples_dataframe):\n",
        "  \"\"\"Returns a version of the input `DataFrame` that keeps only the latitude and longitude.\"\"\"\n",
        "  processed_features = pd.DataFrame()\n",
        "  processed_features[\"latitude\"] = linear_scale(examples_dataframe[\"latitude\"])\n",
        "  processed_features[\"longitude\"] = linear_scale(examples_dataframe[\"longitude\"])\n",
        "  return processed_features\n",
        "\n",
        "lll_dataframe = location_location_location(preprocess_features(california_housing_dataframe))\n",
        "lll_training_examples = lll_dataframe.head(12000)\n",
        "lll_validation_examples = lll_dataframe.tail(5000)\n",
        "\n",
        "_ = train_nn_regression_model(\n",
        "    my_optimizer=tf.train.AdagradOptimizer(learning_rate=0.05),\n",
        "    steps=500,\n",
        "    batch_size=50,\n",
        "    hidden_units=[10, 10, 5, 5, 5],\n",
        "    training_examples=lll_training_examples,\n",
        "    training_targets=training_targets,\n",
        "    validation_examples=lll_validation_examples,\n",
        "    validation_targets=validation_targets)"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Training model...\n",
            "RMSE (on training data):\n",
            "  period 00 : 108.45\n",
            "  period 01 : 105.67\n",
            "  period 02 : 104.25\n",
            "  period 03 : 102.97\n",
            "  period 04 : 101.56\n",
            "  period 05 : 100.80\n",
            "  period 06 : 100.65\n",
            "  period 07 : 100.66\n",
            "  period 08 : 100.21\n",
            "  period 09 : 100.12\n",
            "Model training finished.\n",
            "Final RMSE (on training data):   100.12\n",
            "Final RMSE (on validation data): 99.65\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Dw2Mr9JZ1cRi",
        "colab_type": "text"
      },
      "source": [
        " 对于只有两个特征的模型，结果并不算太糟。当然，地产价值在短距离内仍然可能有较大差异。"
      ]
    }
  ]
}